gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 20:08:50 25 4
gpt4 key购买 nike

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

class var
{

}

class dynamic
{

}

然后像这样使用它们:

enter image description here

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

Cannot implicitly convert type string to dynamic

但是您可能已经注意到,我的dynamic 类表现得像标准的 C# 类。当我尝试这样做时:

 dynamic d = new dynamic();

我遇到了这个错误:

Cannot instantiate dynamic object.

让我们看看var:

enter image description here

在这种情况下,var 仍然被评估为隐式类型定义关键字,我的变量类型推断为字符串。(注意它的颜色是绿色而不是蓝色,这是类名颜色)。但是当我运行程序时它给了我相同的异常:

Cannot implicitly convert type string to var

但有趣的是,当我尝试像这样创建一个新的 var 实例时:

var d = new var();
Console.WriteLine(d.GetType());

它没有给我任何异常,我得到了这个输出:

ConsoleApplication3.var

在所有这些之后我很困惑。我想知道这里有什么区别以及为什么编译器让我们创建名为 vardynamic 的类,它当我创建一个名为 dynamic 的类时没有给我任何错误,但是如果我尝试创建 dynamic 的实例,我会收到错误。但是如果我尝试创建一个 var<,它不会给我任何错误 instance.这不令人困惑吗?我在等待明确的解释。

注意:抱歉我的英语不好和语法错误。

最佳答案

这些被称为 contextual keywords .
如果您没有自己的带有这些名称的类型,它们仅充当关键字。

这样做的目的是允许您刚刚所做的事情。

因为这些关键字是由较新版本的 C#(3.0 和 4.0)引入的,所以某些现有代码库可能(尽管不太可能)具有具有这些名称的类,就像您创建的那样。

因此,如果编译器看到这样的类,它将完全按照以前的方式进行编译,并将它们视为常规类而不是关键字。

关于c# - 为什么可以定义一个名为 var 或 dynamic 的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21299005/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com