C#中变量名中@字符的用法/含义是什么?

时间:2008-09-18 11:44:53

标签: c# naming specifications

我发现您可以在C#中使用“@”字符启动变量名称。 在我的C#项目中,我使用的是用Java编写的Web服务(我添加了对我的项目的Web引用)。 WSDL中定义的一个接口对象有一个名为“params”的成员变量。显然,这是C#中的保留字,因此您不能拥有名为“params”的成员变量的类。生成的代理对象包含如下所示的属性:

public ArrayList @params {
    get { return this.paramsField; }
    set { this.paramsField = value; }
}

我搜索了VS 2008 c#文档,但找不到任何相关信息。搜索谷歌也没有给我任何有用的答案。那么变量/属性名称中'@'字符的确切含义或用法是什么?

9 个答案:

答案 0 :(得分:289)

直接来自C# Language SpecificationIdentifiers (C#)

  

前缀“@”允许使用   关键字作为标识符,即   在与其他人接口时很有用   编程语言。人物 @   实际上并不是其中的一部分   标识符,所以标识符可能是   在其他语言中看作是正常的   标识符,没有前缀。一个   调用带有@前缀的标识符   逐字标识符。

答案 1 :(得分:70)

它只允许您使用保留字作为变量名。不推荐恕我直言(除非你喜欢的情况)。

答案 2 :(得分:35)

在C#中,at(@)字符用于表示明确不符合语言规范中相关规则的文字。

具体来说,它可以用于与保留关键字冲突的变量名(例如,您不能使用参数,但可以使用@params,与语言规范中的out / ref /任何其他关键字相同)。此外,它可以用于未转义的字符串文字;这与路径常数特别相关,例如:而不是path = "c:\\temp\\somefile.txt",你可以写path = @"c:\temp\somefile.txt"。它对正则表达式也非常有用。

答案 3 :(得分:12)

与Perl的标志不同,C#中变量名前的@前缀没有意义。如果x是变量,则@x是同一变量的另一个名称。

> string x = "abc";
> Object.ReferenceEquals(x, @x).Dump();
True

@前缀确实有一个 use ,正如您所发现的那样 - 您可以使用它来澄清C#否则会拒绝的变量名称。

> string string;
Identifier expected; 'string' is a keyword

> string @string;

答案 4 :(得分:8)

@符号允许您使用保留关键字作为变量名称。例如@int@string@double等。

例如:

string @public = "Reserved Keyword used for me and its fine";

上面的代码工作正常,但下面的代码不起作用:

string public = "This will not compile";

答案 5 :(得分:4)

它只允许您使用保留字作为变量名。前几天我想要一个名为event的var。我打算转而使用_event,但我的同事提醒我,我可以将其称为@event

答案 6 :(得分:2)

另一个用例是扩展方法。可以使用@this名称区分第一个特殊参数以表示其真实含义。一个例子:

public static TValue GetValueOrDefault<TKey, TValue>(
    this IDictionary<TKey, TValue> @this,
    TKey key,
    TValue defaultValue)
    {
        if (!@this.ContainsKey(key))
        {
            return defaultValue;
        }

        return @this[key];
    }

答案 7 :(得分:1)

如果我们使用关键字作为标识符的名称,我们会收到编译器错误“标识符,'标识符名称'是关键字” 要克服此错误,请在标识符前加上“@”。这些标识符是逐字标识符。 字符@实际上不是标识符的一部分,因此标识符可能在其他语言中看作普通标识符,没有前缀

答案 8 :(得分:1)

您可以使用它将保留关键字用作变量名称,如

 int @int = 3; 

编译器将忽略@并将变量编译为int

使用思想

并不常见