Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 强制使用“;var”;被解析为关键字而不是类名_C# - Fatal编程技术网

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都是有效的。它不需要是保留关键字就可以生效。因此,它的行为将与省略它完全相同,但您可以提供冗余的
@