我曾多次看到ReSharper生成的代码如下:
delegate void myHandler(int i);
myHandler myHandlerContainer;
...
foreach (Delegate @delegate in myHandlerContainer.GetInvocationList())
{...}
@delegate 中的' @ '是否赋予该变量任何特殊的语义含义?
或者这只是我之前没遇到过的惯例?
答案 0 :(得分:15)
来自MSDN的更多详细信息:
前缀“@”允许使用 关键字作为标识符,即 在与其他人接口时很有用 编程语言。人物 @ 实际上并不是其中的一部分 标识符,所以标识符可能是 在其他语言中看作是正常的 标识符,没有前缀。一个 调用带有@前缀的标识符 逐字标识符。使用@ 标识符的前缀不是 允许使用关键字,但强烈 沮丧是一种风格问题。
来自C# Language Specification: 2.4.2 Identifiers。
使用'@'进行前缀允许例如从一个名为“delegate”的类派生,该类可能在用C#以外的其他语言编写的库中定义。
在任何其他情况下,我都不建议使用这种语法,而是建立与C#关键字不同的标识符(例如,值而不是值),以提高代码的可读性,避免混淆是否附加任何特殊含义。< / p>
还有一个关于变量命名的有趣事实:
包含两个连续的标识符 下划线字符(U + 005F)是 保留供使用 实现。例如,一个 实施可能会提供扩展 以两个开头的关键字 下划线。
答案 1 :(得分:12)
“@ delegate”用于区分变量名称和“delegate”关键字。