Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
485 views
in Technique[技术] by (71.8m points)

c# - Does the @ prefix for delegates have any special meaning?

Several times I've seen ReSharper generate code that looks like this:

delegate void myHandler(int i);
myHandler myHandlerContainer;
...
foreach (Delegate @delegate in myHandlerContainer.GetInvocationList())
{...}

Does the '@' in @delegate give that variable any special semantic meaning?
Or is it just a convention I didn't encounter before?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Some more details from MSDN:

The prefix "@" enables the use of keywords as identifiers, which is useful when interfacing with other programming languages. The character @ is not actually part of the identifier, so the identifier might be seen in other languages as a normal identifier, without the prefix. An identifier with an @ prefix is called a verbatim identifier. Use of the @ prefix for identifiers that are not keywords is permitted, but strongly discouraged as a matter of style.

from C# Language Specification: 2.4.2 Identifiers.

Prefixing with '@' therefore allows e.g. to derive from a class named "delegate" which might be defined in a library written in another language than C#.

In any other case I would not recommend to use this syntax and rather make up identifiers different from the C# keywords (e.g. valu instead of value) to increase code readability and avoid confusion whether there is any special meaning attached to it. If it is done, properly comment as to why it was done so that others are aware.

There is also another interesting fact about variable naming mentioned there:

Identifiers containing two consecutive underscore characters (U+005F) are reserved for use by the implementation. For example, an implementation might provide extended keywords that begin with two underscores.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...