C# 强制使用“;var”;被解析为关键字而不是类名
当声明一个名为C# 强制使用“;var”;被解析为关键字而不是类名,c#,C#,当声明一个名为var的类时,是否可以强制C#编译器将var视为关键字,而不是类标识符 公共类变量 { } 公共A类 { } 公共课程 { 公共静态void Main() { var a=newa{};//无法将类型“a”隐式转换为“var” } } 是的,当然可以: namespace vartest { public class var { public var() { MessageBox.Show("It is me!")
var
的类时,是否可以强制C#编译器将var
视为关键字,而不是类标识符
公共类变量
{
}
公共A类
{
}
公共课程
{
公共静态void Main()
{
var a=newa{};//无法将类型“a”隐式转换为“var”
}
}
是的,当然可以:
namespace vartest
{
public class var {
public var()
{
MessageBox.Show("It is me!");
}
}
}
namespace myform {
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
vartest.var theVar = new vartest.var();
var a = "whatever";
}
}
}
正如您所理解的,诀窍在于名称空间;-)
因此,为了保护c#var,请在自己的名称空间中定义var类,而不应“使用”
干杯您可以将var类名声明为@var并进行检查吗@强制关键字的行为类似于变量。在代码中,您不能再将
var
用作上下文中的关键字
var
是一个上下文关键字(有两种类型:普通和上下文),其行为类似于其各自上下文中的关键字,用作类型名称,但仍可用作标识符(非保留)
您将其声明为类名,因此它在上下文中失去了特殊意义。为什么要首先将类命名为“var”?什么是“var”?
var
不是保留的关键字,而是上下文关键字。肯尼思K:问题来自自动生成的代码。我很困惑为什么“var o=new X();”会抛出编译时错误。这确实是语言允许的一个真实问题,尽管afaik只允许类具有关键字名称,但我相信对于名为var
的变量不会发生这种情况,因此var=5
是完全可以的,尽管很奇怪。无论如何,关键字是小写的,那些遵循命名约定的人不应该有这个问题。虽然所有的赌注都押在生成的代码上,但是。。。你真的想使用生成的代码,而这些代码甚至不能遵循这样简单的准则吗?@Franta实际上,它是为了不破坏现有的代码而设计的。C#团队避免添加新的保留关键字以避免破坏现有代码,因此当引入var
时,它不是保留关键字,而是上下文关键字。当一个名为“var”的标识符在范围内时,您还没有演示如何使用var
上下文关键字。您的代码未按要求使用上下文关键字。您刚刚使用名为var
的类编写了代码,这并不是问题所在。问题是问另一种方法-如何使变量的行为类似于关键字。当您要使用的名称相当于某个保留关键字时,Verbatim()会起作用。但是,“var”不是保留关键字。@无论变量名如何,具有以@
开头的变量的Franta都是有效的。它不需要是保留关键字就可以生效。因此,它的行为将与省略它完全相同,但您可以提供冗余的@
。