Cri*_*scu 10 c# syntax delegates
我曾多次看到ReSharper生成的代码如下所示:
delegate void myHandler(int i);
myHandler myHandlerContainer;
...
foreach (Delegate @delegate in myHandlerContainer.GetInvocationList())
{...}
Run Code Online (Sandbox Code Playgroud)
@delegate中的' @ ' 是否赋予该变量任何特殊的语义含义?
或者这只是我之前没遇到过的惯例?
Dir*_*mar 15
来自MSDN的更多细节:
前缀"@"允许使用关键字作为标识符,这在与其他编程语言交互时很有用.字符@实际上不是标识符的一部分,因此标识符可能在其他语言中看作普通标识符,没有前缀.带有@前缀的标识符称为逐字标识符.允许使用@前缀作为非关键字的标识符,但强烈建议不要使用样式.
因此,使用'@'进行前缀允许例如从名为"委托"的类派生,该类可以在用C#以外的其他语言编写的库中定义.
在任何其他情况下,我不建议使用此语法,而是构建与C#关键字不同的标识符(例如,值而不是值),以提高代码可读性并避免混淆是否附加任何特殊含义.
关于那里提到的变量命名还有另一个有趣的事实:
包含两个连续下划线字符(U + 005F)的标识符保留供实现使用.例如,实现可能会提供以两个下划线开头的扩展关键字.