【发布时间】:2014-01-23 03:52:23
【问题描述】:
今天我注意到我们可以定义一个名为var 或dynamic 的类。首先,我认为这是不可能的,因为这些是特殊关键字,不能用作Class name.但后来我尝试了,我很惊讶。这是一个奇怪的情况,当我定义两个类时:
class var
{
}
class dynamic
{
}
并像这样使用它们:
它没有给我任何错误。但是当我尝试运行我的程序时,它给出了这个错误:
无法将类型字符串隐式转换为动态
但您可能已经注意到,我的 dynamic 类的行为类似于标准 C# 类。当我尝试这个时:
dynamic d = new dynamic();
我收到了这个错误:
无法实例化动态对象。
我们来看看var:
在这种情况下 var 仍然被评估为隐式类型定义关键字,我的变量类型推断为字符串。(注意它的颜色是绿色而不是蓝色,这是类名颜色)。但是当我运行程序时它给了我相同的例外:
无法将类型字符串隐式转换为 var
但有趣的是,当我尝试像这样创建一个新的 var 实例时:
var d = new var();
Console.WriteLine(d.GetType());
它没有给我任何异常,我得到这个输出:
ConsoleApplication3.var
在所有这些之后我很困惑。我想知道这里有什么区别以及为什么编译器让我们创建名为 var 和 dynamic 的类,创建时它不会给我任何错误一个名为 dynamic 的类,但是如果我尝试创建 dynamic 的实例,则会出现错误。但是,如果我尝试创建 var 实例,它不会给我任何错误。这不是令人困惑吗?我正在等待明确的解释。
注意:对于我糟糕的英语和语法错误,我深表歉意。
【问题讨论】: