为什么可以定义一个名为var或dynamic的类?

2023-12-11

今天我注意到我们可以定义一个名为var or dynamic。首先,我认为这是不可能的,因为这些是特殊关键字,不能用作Class name.但后来我尝试了,我很惊讶。当我定义两个类时,这是一个奇怪的情况:

class var
{

}

class dynamic
{

}

并像这样使用它们:

enter image description here

它没有给我任何错误。但是当我尝试运行我的程序时,它给出了这个错误:

无法将字符串类型隐式转换为动态类型

但正如你可能已经注意到的,我的dynamic类的行为类似于标准 C# 类。当我尝试这样做时:

 dynamic d = new dynamic();

我收到这个错误:

无法实例化动态对象。

让我们看看var:

enter image description here

在这种情况下, 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(使用前将#替换为@)

为什么可以定义一个名为var或dynamic的类? 的相关文章