C#在参数名称前面加上@
可能重复:C#在参数名称前面加上@,c#,C#,可能重复: 重复: 有时我会看到一些C#代码,其中方法参数的前缀是@,如下所示: public static void SomeStaticMethod( SomeType @parameterName ) { } public class PostLoadEventListener : IPostLoadEventListener { public void OnPostLoad( PostLoadEvent @event ) { } } 这是什么意思?它有什
重复: 有时我会看到一些C#代码,其中方法参数的前缀是@,如下所示:
public static void SomeStaticMethod( SomeType @parameterName ) { }
public class PostLoadEventListener : IPostLoadEventListener
{
public void OnPostLoad( PostLoadEvent @event )
{
}
}
这是什么意思?它有什么重要的特殊意义吗
我正在NHibernate中创建一个EventListener,当我让VS.NET生成接口方法时,它会生成OnPostLoad方法,如下所示:
public static void SomeStaticMethod( SomeType @parameterName ) { }
public class PostLoadEventListener : IPostLoadEventListener
{
public void OnPostLoad( PostLoadEvent @event )
{
}
}
这是为什么?尝试创建一个名为class的变量,看看会发生什么——您会注意到出现错误 这允许您使用保留字作为变量名 不相关的,您还将注意到前缀为@的字符串——这不是一回事
string says = @"He said ""This literal string lets me use \ normally
and even line breaks"".";
这允许您使用字符串的“literal”值,这意味着您可以使用新行或字符而不使用转义符等。事件是一个C#关键字,@是一个转义字符,允许您使用关键字作为变量名。前缀允许您在C#中使用保留字,如类、接口、事件等作为变量名。所以你可以
int @int = 1
这可能是个坏主意…我知道我总是避免这样做,但这是一个可用的功能。德文:有些情况下,你真的无法避免它,例如,与用其他语言编写的程序集或以前版本的C#进行接口。但同时,当您无法预测该语言的未来版本中可能会引入哪些新关键字时,就有必要。。。毕竟,您可能有一个4.0之前的库,它使用“动态”作为符号名,否则您将无法从4.0应用程序完全访问它……因为C#1.0没有添加新的保留字,只有上下文关键字。对于dynamic,情况也是如此。这是一个经常出现的问题,我们可以把它放到一个特定于标签的FAQ中,查看相关的uservoice票证:这个例子会让我做噩梦。哈哈!我知道。我无情地搜寻这样的代码并将其吹走!也许这个例子应该更新为int@double=(int)(1.0/0.0);。那么至少整个事情是痛苦的。我熟悉在字符串前面加@:),但在变量名前面加前缀对我来说是新的。无论如何,你的解释很清楚。我喜欢这个字符串交叉信息,可能对一些读者有用。