C#中的@语法是什么

时间:2011-11-14 12:30:49

标签: c#

  

可能重复:
  What's the use/meaning of the @ character in variable names in C#?

我在几个地方看到过,包括Resharper转换代码......

SomeClass @object = new SomeClass( ... );

我认为这是匿名的,但我认为我错了

这真的意味着什么吗?

6 个答案:

答案 0 :(得分:8)

  

前缀“@”允许使用关键字作为标识符,即   在与其他编程语言交互时很有用。该   character @实际上不是标识符的一部分,所以标识符   可能在其他语言中看作普通标识符,没有   字首。带有@前缀的标识符称为逐字   标识符

示例:

class @class
{
   public static void @static(bool @bool) {
      if (@bool)
         System.Console.WriteLine("true");
      else
         System.Console.WriteLine("false");
   }   
}

请参阅: http://msdn.microsoft.com/en-us/library/aa664670.aspx

答案 1 :(得分:2)

它允许您使用保留关键字作为标识符。例如,我遇到的常见情况是定义锁定对象,例如

object lock = new object(); // this would throw a compiler error as `lock` is a reserved word.

所以我必须用@符号作为前缀,告诉编译器这不是一个类型而是文字:

object @lock = new object();

另一方面,如果您发生此类冲突,通常情况下这是一个很好的指示,表明您的身份证明不具备描述性。

答案 2 :(得分:1)

这背后的原因是对象是C#中受保护的关键字。 @符号将告诉编译器应该是变量的名称,不应与object关键字混淆。

答案 3 :(得分:0)

它表示“文字”,即“此名称不是关键字或类型标识符”。没有它,object将被视为一种类型。

答案 4 :(得分:0)

this question中查看我的回答。

  

@符号允许您在变量名称中使用reserved words

int @class = 1;

void MyMethod(int @goto);

bool @public { get; set; }

答案 5 :(得分:0)

关键字是预定义的保留标识符,对编译器具有特殊含义。它们不能用作程序中的标识符,除非它们包含 @ 作为前缀。例如, @if 是合法标识符,但如果不是因为它是关键字。

请参阅此C# Keywords