【发布时间】:2011-12-28 15:03:44
【问题描述】:
可能重复:
What's the use/meaning of the @ character in variable names in C#?
我在几个地方看到过,包括 Resharper 转换的代码...
SomeClass @object = new SomeClass( ... );
我以为是匿名的,但我认为我错了
这真的意味着什么吗?
【问题讨论】:
标签: c#
可能重复:
What's the use/meaning of the @ character in variable names in C#?
我在几个地方看到过,包括 Resharper 转换的代码...
SomeClass @object = new SomeClass( ... );
我以为是匿名的,但我认为我错了
这真的意味着什么吗?
【问题讨论】:
标签: c#
前缀“@”允许使用关键字作为标识符,即 在与其他编程语言交互时很有用。这 字符@实际上不是标识符的一部分,所以标识符 可能在其他语言中被视为普通标识符,没有 字首。带有@前缀的标识符称为逐字 标识符。
示例:
class @class
{
public static void @static(bool @bool) {
if (@bool)
System.Console.WriteLine("true");
else
System.Console.WriteLine("false");
}
}
【讨论】:
它允许您使用保留关键字作为标识符。例如,我遇到的一个常见场景是在定义锁定对象时,例如
object lock = new object(); // this would throw a compiler error as `lock` is a reserved word.
所以我必须在它前面加上 @ 符号来告诉编译器这不是类型而是文字:
object @lock = new object();
附带说明,如果您遇到这样的冲突,这通常是一个很好的指标,表明您的标识符描述性不够。
【讨论】:
这背后的原因是 object 在 C# 中是一个受保护的关键字。 @ 符号将告诉编译器这应该是变量的名称,并且不应与 objectkeyword 混淆。
【讨论】:
它的意思是“文字”,即“这个名字不是关键字或类型标识符”。没有它,object 将被视为一种类型。
【讨论】:
在this question 中查看我的回答。
@符号允许您在变量名中使用reserved words。
int @class = 1;
void MyMethod(int @goto);
bool @public { get; set; }
【讨论】:
关键字 是预定义的保留标识符,对编译器具有特殊含义。除非它们包含 @ 作为前缀,否则它们不能用作程序中的标识符。例如,@if 是合法标识符,但 if 不是,因为它是关键字。
参考这个C# Keywords
【讨论】: