今天我注意到我们可以定义一个名为var
or dynamic
。首先,我认为这是不可能的,因为这些是特殊关键字,不能用作Class name.
但后来我尝试了,我很惊讶。当我定义两个类时,这是一个奇怪的情况:
class var
{
}
class dynamic
{
}
并像这样使用它们:
它没有给我任何错误。但是当我尝试运行我的程序时,它给出了这个错误:
无法将字符串类型隐式转换为动态类型
但正如你可能已经注意到的,我的dynamic
类的行为类似于标准 C# 类。当我尝试这样做时:
dynamic d = new dynamic();
我收到这个错误:
无法实例化动态对象。
让我们看看var:
在这种情况下, var 仍然被评估为隐式类型定义关键字,而我的变量类型推断为字符串。(请注意,它的颜色是绿色而不是蓝色,这是类名颜色)。但是当我运行程序时,它给了我同样的异常:
无法将 string 类型隐式转换为 var
但有趣的是,当我尝试创建一个新的 var 实例时,如下所示:
var d = new var();
Console.WriteLine(d.GetType());
它没有给我任何异常,我得到以下输出:
ConsoleApplication3.var
现在,在完成所有这些之后,我很困惑。我想知道这里有什么区别以及为什么编译器让我们创建名为的类var
and dynamic
,当我创建一个名为dynamic的类时,它不会给我任何错误,但是如果我尝试创建dynamic的实例,我会收到一个错误。但是,如果我尝试创建一个名为dynamic的类,它不会给我任何错误var
实例。这不是令人困惑吗?我在等待明确的解释。
注意:很抱歉我的英语不好和语法错误。
这些被称为上下文关键词.
仅当您没有使用这些名称的自己的类型时,它们才充当关键字。
这样做的目的是允许您刚刚所做的事情。
由于这些关键字是由较新版本的 C#(3.0 和 4.0)引入的,因此某些现有代码库可能(尽管不太可能)具有具有这些名称的类,就像您所做的那样。
因此,如果编译器看到这样的类,它将完全按照以前的方式进行编译,并将它们视为常规类而不是关键字。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)