代表的@前缀是否有任何特殊含义?

时间:2009-04-07 10:04:43

标签: c# syntax delegates

我曾多次看到ReSharper生成的代码如下:

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

@delegate 中的' @ '是否赋予该变量任何特殊的语义含义?
或者这只是我之前没遇到过的惯例?

2 个答案:

答案 0 :(得分:15)

来自MSDN的更多详细信息:

  

前缀“@”允许使用   关键字作为标识符,即   在与其他人接口时很有用   编程语言。人物 @   实际上并不是其中的一部分   标识符,所以标识符可能是   在其他语言中看作是正常的   标识符,没有前缀。一个   调用带有@前缀的标识符   逐字标识符。使用@   标识符的前缀不是   允许使用关键字,但强烈   沮丧是一种风格问题。

来自C# Language Specification: 2.4.2 Identifiers

使用'@'进行前缀允许例如从一个名为“delegate”的类派生,该类可能在用C#以外的其他语言编写的库中定义。

在任何其他情况下,我都不建议使用这种语法,而是建立与C#关键字不同的标识符(例如,值而不是值),以提高代码的可读性,避免混淆是否附加任何特殊含义。< / p>

还有一个关于变量命名的有趣事实:

  

包含两个连续的标识符   下划线字符(U + 005F)是   保留供使用   实现。例如,一个   实施可能会提供扩展   以两个开头的关键字   下划线。

答案 1 :(得分:12)

“@ delegate”用于区分变量名称和“delegate”关键字。