What's the use/meaning of the @ character in variable names in C#?
我发现您可以用C_中的"@"字符开始变量名。在我的C项目中,我使用了用Java编写的Web服务(我添加了我的项目的Web引用)。WSDL中定义的一个接口对象有一个名为"params"的成员变量。显然,这是C中的保留字,因此不能使用名为"params"的成员变量的类。生成的代理对象包含如下所示的属性:
1 2 3 4 | public ArrayList @params { get { return this.paramsField; } set { this.paramsField = value; } } |
我搜索了VS 2008 C文档,但找不到任何相关信息。搜索谷歌也没有给我任何有用的答案。那么变量/属性名中"@"字符的确切含义或用法是什么?
直接从C语言规范,标识符(C):
The prefix"@" enables the use of
keywords as identifiers, which is
useful when interfacing with other
programming languages. The character @
is not actually part of the
identifier, so the identifier might be
seen in other languages as a normal
identifier, without the prefix. An
identifier with an @ prefix is called
a verbatim identifier.
它只允许您使用保留字作为变量名。不建议使用imho(除非您这样做)。
在C中,at(@)字符用于表示显式不符合语言规范中相关规则的文本。
具体来说,它可以用于与保留关键字冲突的变量名(例如,不能使用参数,但可以使用@params,与语言规范中的out/ref/任何其他关键字相同)。此外,它还可以用于未转义的字符串文本;这与路径常量尤其相关,例如,您可以编写
与Perl的sigils不同,c中变量名前面的
1 2 3 | > string x ="abc"; > Object.ReferenceEquals(x, @x).Dump(); True |
但是,正如您发现的那样,
1 2 3 4 |
例如:
1 | string @public ="Reserved Keyword used for me and its fine"; |
上面的代码工作正常,但下面的代码不工作:
1 | string public ="This will not compile"; |
它只允许您使用保留字作为变量名。前几天我想要一个名为
另一个用例在扩展方法中。第一,特殊参数可以用
1 2 3 4 5 6 7 8 9 10 11 12 | public static TValue GetValueOrDefault<TKey, TValue>( this IDictionary<TKey, TValue> @this, TKey key, TValue defaultValue) { if (!@this.ContainsKey(key)) { return defaultValue; } return @this[key]; } |
您可以使用它使用保留关键字作为变量名,例如
1 | int @int = 3; |
编译器将忽略
使用思想不是一种常见的做法
如果我们使用一个关键字作为标识符的名称,我们会得到一个编译器错误"需要标识符","标识符名称"是一个关键字"要克服此错误,请在标识符前面加"@"。这些标识符是逐字标识符。字符@实际上不是标识符的一部分,因此在其他语言中,标识符可能被视为没有前缀的普通标识符。