不是varC#中的关键字?但为什么我这样做:
public class var { }
public class main
{
public static void main(string[] args)
{
var testVar = new var();
}
}
Run Code Online (Sandbox Code Playgroud)
该var是在代码中使用的是var这是在之前声明的类main类.编译器甚至没有抱怨.
当我这样做时:
public class int { }
Run Code Online (Sandbox Code Playgroud)
或这个:
public class true { }
Run Code Online (Sandbox Code Playgroud)
编译器说int或者true是关键字,不能像那样使用.为什么不一样var?
在最后一期Heinz Kabutz的时事通讯#255 Java 10:推断的局部变量中,显示它var不是Java 10中的保留字,因为您也可以使用它var作为标识符:
public class Java10 {
var var = 42; // <-- this works
}
Run Code Online (Sandbox Code Playgroud)
但是,您不能使用ie assert作为标识符var assert = 2,因为它assert是一个保留字.
正如在链接的时事通讯中所说的那样,var不是保留字的事实是好消息,因为这允许来自Java的先前版本的代码var用作标识符在Java 10中编译而没有问题.
那么,那是什么var?它既不是显式类型也不是语言的保留字,因此它被允许作为标识符,但是当它用于在Java 10中声明局部变量时它确实具有特殊含义.我们究竟在一个上下文中调用它局部变量声明?
此外,除了支持向后兼容性(通过允许包含var作为标识符的旧代码进行编译),还有其他优点是var 不是保留字吗?
今天我注意到我们可以定义一个名为varor 的类dynamic.首先,我认为这是不可能的,因为这些是特殊的关键字,不能用作Class name.但是后来我尝试了,我很惊讶.这是一个奇怪的情况,当我定义两个类:
class var
{
}
class dynamic
{
}
Run Code Online (Sandbox Code Playgroud)
并像这样使用它们:
它没有给我任何错误.但是当我尝试运行我的程序时它会出现这个错误:
无法将类型字符串隐式转换为动态
但是您可能已经注意到,我的dynamic课程表现得像一个标准的C#课.当我尝试这个时:
dynamic d = new dynamic();
Run Code Online (Sandbox Code Playgroud)
我收到了这个错误:
无法实例化动态对象.
我们来看看吧 var:

在这种情况下,var仍被评估为隐式类型定义关键字,我的变量类型推断为字符串.(注意它的颜色是绿色而不是蓝色,这是类名颜色).但是当我运行程序时,它给了我相同的异常:
无法将类型字符串隐式转换为var
但有趣的是,当我尝试创建一个像这样的新var实例时:
var d = new var();
Console.WriteLine(d.GetType());
Run Code Online (Sandbox Code Playgroud)
它没有给我任何异常,我得到这个输出:
ConsoleApplication3.var
Run Code Online (Sandbox Code Playgroud)
现在毕竟这些我confused.I'm想知道是什么样的区别就在这里,为什么编译器让我们创建一个名为类var和dynamic,它不给我,当我创建一个类名为动态任何错误,但如果我尝试创建动态的实例我收到了一个错误.但是如果我尝试创建一个var实例,它不会给我任何错误.这不是那么令人困惑吗?我在等待清楚的解释.
注意:抱歉我的英语和语法错误.