Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 代表的@前缀有什么特殊意义吗?_C#_Syntax_Delegates - Fatal编程技术网

C# 代表的@前缀有什么特殊意义吗?

C# 代表的@前缀有什么特殊意义吗?,c#,syntax,delegates,C#,Syntax,Delegates,我多次看到ReSharper生成如下代码: delegate void myHandler(int i); myHandler myHandlerContainer; ... foreach (Delegate @delegate in myHandlerContainer.GetInvocationList()) {...} @delegate中的“@”是否赋予该变量任何特殊的语义含义? 或者这只是我以前没有遇到过的约定?委托是为了区分变量名和委托关键字。来自MSDN的更多详细信息: 前缀“

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

delegate void myHandler(int i);
myHandler myHandlerContainer;
...
foreach (Delegate @delegate in myHandlerContainer.GetInvocationList())
{...}
@delegate中的“@”是否赋予该变量任何特殊的语义含义?

或者这只是我以前没有遇到过的约定?

委托是为了区分变量名和委托关键字。

来自MSDN的更多详细信息:

前缀“
@
”允许使用关键字作为标识符,这在与其他编程语言交互时非常有用。字符
@
实际上不是标识符的一部分,因此该标识符在其他语言中可能被视为普通标识符,没有前缀。带有
@
前缀的标识符称为逐字标识符。允许对非关键字的标识符使用
@
前缀,但强烈反对使用这种前缀

因此,前缀为“
@
”可以从名为“
delegate
”的类派生,该类可能在用C#以外的其他语言编写的库中定义

在任何其他情况下,我不建议使用此语法,而是使用与C#关键字不同的标识符(例如,
valu
而不是
value
),以提高代码可读性,避免混淆是否有任何特殊含义附加到代码中。如果这样做了,适当地评论为什么这样做,以便其他人知道

这里还提到了另一个关于变量命名的有趣事实:

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


杰出的这就是我要找的参考资料:-)