C# 为什么可以定义一个名为var或dynamic的类?
今天我注意到我们可以定义一个名为C# 为什么可以定义一个名为var或dynamic的类?,c#,dynamic,var,C#,Dynamic,Var,今天我注意到我们可以定义一个名为var或dynamic的类。首先,我认为这是不可能的,因为这些是特殊的关键字,不能用作类名。,但后来我尝试了,我很惊讶。当我定义两个类时,出现了一种奇怪的情况: class var { } class dynamic { } 然后像这样使用它们: var d = new var(); Console.WriteLine(d.GetType()); 它不会给我任何错误。但当我尝试运行我的程序时,它会给出以下错误: 无法将类型字符串隐式转换为动态字符串 但
var
或dynamic
的类。首先,我认为这是不可能的,因为这些是特殊的关键字,不能用作类名。
,但后来我尝试了,我很惊讶。当我定义两个类时,出现了一种奇怪的情况:
class var
{
}
class dynamic
{
}
然后像这样使用它们:
var d = new var();
Console.WriteLine(d.GetType());
它不会给我任何错误。但当我尝试运行我的程序时,它会给出以下错误:
无法将类型字符串隐式转换为动态字符串
但正如您可能已经注意到的,我的动态类的行为类似于标准C#类
dynamic d = new dynamic();
我得到了这个错误:
无法实例化动态对象
让我们看看var:
在本例中,var仍然作为隐式类型定义关键字进行计算,而我的变量类型推断为字符串。(注意,它的颜色是绿色而不是蓝色,这是类名颜色)。但当我运行程序时,它给了我相同的异常:
无法将类型字符串隐式转换为变量
但有趣的是,当我尝试创建一个新的var实例时,如下所示:
var d = new var();
Console.WriteLine(d.GetType());
它没有给我任何异常,我得到以下输出:
ConsoleApplication3.var
现在,在所有这些之后,我感到困惑。我想知道这里的区别是什么,为什么编译器让我们创建名为var
和dynamic
的类,当我创建名为dynamic的类时,它不会给我任何错误,但是如果我尝试创建dynamic的实例,我会得到一个错误。但是如果我尝试创建var
实例,它不会给我任何错误。这是不是很混乱?我在等清楚的解释
注:对不起,我的英语和语法错误不好 这些被称为。
如果您没有自己的具有这些名称的类型,则它们只能充当关键字
这一点是为了让你所做的一切都能实现
因为这些关键字是由较新版本的C#(3.0和4.0)引入的,所以一些现有的代码库可能(尽管不太可能)有具有这些名称的类,就像您所做的那样
因此,如果编译器看到这些类,它将完全按照以前的方式编译,并将它们视为常规类而不是关键字。这些类被称为。
如果您没有自己的具有这些名称的类型,则它们只能充当关键字
这一点是为了让你所做的一切都能实现
因为这些关键字是由较新版本的C#(3.0和4.0)引入的,所以一些现有的代码库可能(尽管不太可能)有具有这些名称的类,就像您所做的那样
因此,如果编译器看到这样的类,它将完全按照以前的方式编译,并将它们视为常规类而不是关键字。我理解。但据我所知,在var关键字之后添加了dynamic关键字。为什么我可以创建var
实例,但是我不能创建一个动态实例?@Selman22:这对我来说很好;你一定做错了什么事。你在哪里申报的?请包括我理解的完整源文件(例如,on)。但据我所知,在var关键字之后添加了dynamic关键字。为什么我可以创建var
实例,但我不能创建dynamic
实例?@Selman22:这对我来说很好;你一定做错了什么事。你在哪里申报的?请包括完整的源文件(例如,on)