C#中变量名前的@符号是啥意思? [复制]

Posted

技术标签:

【中文标题】C#中变量名前的@符号是啥意思? [复制]【英文标题】:What does the @ symbol before a variable name mean in C#? [duplicate]C#中变量名前的@符号是什么意思? [复制] 【发布时间】:2010-09-30 13:56:46 【问题描述】:

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

我知道 @ 符号可以在字符串文字之前使用来更改编译器解析字符串的方式。但是变量名以@符号为前缀是什么意思呢?

【问题讨论】:

见***.com/questions/91817 【参考方案1】:

@ 符号在 C# 中有两个用途:

首先,它允许您使用保留关键字作为变量,如下所示:

int @int = 15;

第二个选项允许您指定一个字符串,而无需转义任何字符。例如,'\' 字符是一个转义字符,所以通常你需要这样做:

var myString = "c:\\myfolder\\myfile.txt"

您也可以这样做:

var myString = @"c:\myFolder\myfile.txt"

【讨论】:

它如何影响字符串正是我所寻找的。谢谢! 谢谢,@ 字符串的用法正是我想要的 您仍然需要通过加倍来转义双引号。 这是 IMO 更好的答案 @Cyber​​neticTwerkGuruOrc 虽然这是一个更详细的答案,但它超出了 OP 的要求,但标记的答案解决了 @ 与变量一起使用时的具体问题,因此(IMO)越多 正确答案。【参考方案2】:

其他答案忘记的重要一点是,“@keyword”在 CIL 中被编译为“keyword”。

因此,如果您有一个框架,例如 F#,它要求您定义一个具有名为“class”的属性的类,您实际上可以这样做。

在实践中并不有用,但没有它会阻止 C# 实现某些形式的语言互操作。

我通常看到它不是用于互操作,而是为了避免关键字限制(通常在局部变量名称上,这是 only 效果)即。

private void Foo()
   int @this = 2;

但我强烈反对这样做!只需找到另一个名称,即使变量的“最佳”名称是保留名称之一。

【讨论】:

这可能是个好建议。我认为 @ 限定符等效于 VB.Net 的方括号,因此 VB 等效项是:dim [Class] as Int32 = 15 @Michael 完全等同于 VB.NET 的方括号语法。 ***.com/questions/6639688/… 指出 F# 出于相同目的在标识符周围使用双反引号。 作为迟到的评论 - “不是说它很有用” - 在 MVC 中,您可以将名为“class”的属性转发给渲染 e - 变成 html“class”定义 CSS 类。【参考方案3】:

它允许您使用 C# 关键字作为变量。例如:

class MyClass

   public string name  get; set; 
   public string @class  get; set; 

【讨论】:

【参考方案4】:

@ 符号允许您使用保留字。例如:

int @class = 15;

上述方法有效,而以下方法无效:

int class = 15;

【讨论】:

它与下划线有什么不同? 带有@符号的名称在程序集中记录为“class”,而带有下划线的名称为“_class”。因此,如果另一种 .NET 语言没有将“class”定义为保留字,它们可以只使用“class”这个名称。 如果你使用@class 作为属性名,你可以像这样访问它:MyClass.class 而不是 MyClass._class 当你认为你知道所有关于 C# 的知识时,你就会学到一些新东西。 :) @Vilx- 在 ASP.net MVC 中使用它很常见,因为这是表达某些东西的唯一方式。例如,如果你想设置一个元素的类属性,你需要输入new @class = "mc" ;,即使你的意思是“类”,这是唯一的方法。我要说明的一点是,@ 不是变量实际名称的一部分。

以上是关于C#中变量名前的@符号是啥意思? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

struct中变量名前的点是啥意思?

变量名前的下划线“_”对 Flutter 意味着啥

Swiftui 中 init() 中变量前的下划线是啥意思?

在python中,双星后跟变量名是啥意思? [复制]

字符串文字前的符号“@”是啥意思? [复制]

在 C++ 中的函数名前使用 & 符号的含义?