C# 代表的@前缀有什么特殊意义吗?
我多次看到ReSharper生成如下代码:C# 代表的@前缀有什么特殊意义吗?,c#,syntax,delegates,C#,Syntax,Delegates,我多次看到ReSharper生成如下代码: delegate void myHandler(int i); myHandler myHandlerContainer; ... foreach (Delegate @delegate in myHandlerContainer.GetInvocationList()) {...} @delegate中的“@”是否赋予该变量任何特殊的语义含义? 或者这只是我以前没有遇到过的约定?委托是为了区分变量名和委托关键字。来自MSDN的更多详细信息: 前缀“
delegate void myHandler(int i);
myHandler myHandlerContainer;
...
foreach (Delegate @delegate in myHandlerContainer.GetInvocationList())
{...}
@delegate中的“@”是否赋予该变量任何特殊的语义含义?或者这只是我以前没有遇到过的约定?委托是为了区分变量名和委托关键字。来自MSDN的更多详细信息: 前缀“
@
”允许使用关键字作为标识符,这在与其他编程语言交互时非常有用。字符@
实际上不是标识符的一部分,因此该标识符在其他语言中可能被视为普通标识符,没有前缀。带有@
前缀的标识符称为逐字标识符。允许对非关键字的标识符使用@
前缀,但强烈反对使用这种前缀
从
因此,前缀为“@
”可以从名为“delegate
”的类派生,该类可能在用C#以外的其他语言编写的库中定义
在任何其他情况下,我不建议使用此语法,而是使用与C#关键字不同的标识符(例如,valu
而不是value
),以提高代码可读性,避免混淆是否有任何特殊含义附加到代码中。如果这样做了,适当地评论为什么这样做,以便其他人知道
这里还提到了另一个关于变量命名的有趣事实:
包含两个连续下划线字符(U+005F
)的标识符保留供实现使用。例如,一个实现可能提供以两个下划线开头的扩展关键字
杰出的这就是我要找的参考资料:-)