Dav*_*Dev 8 .net c# constructor command-line-interface value-type
我最近读到C#和CLI标准定义了处理值类型和构造函数的不同方法.
根据CLI规范,值类型不能具有无参数构造函数,而在C#规范中,值类型具有默认的无参数构造函数.如果根据CLI规范,您需要在不指定任何参数的情况下创建值,那么可以使用特殊指令来执行此操作.
所以我的问题是
在各个地方,从一致性的观点来看,将值类型视为具有无参数构造函数是有意义的.您始终可以在不提供任何参数的情况下创建值,这在CLI和C#中都是如此.在C#中,您可以使用标准构造函数语法:
int x = new int();
Run Code Online (Sandbox Code Playgroud)
而不是有一个语法和调用"真正的"构造函数的不同语法.
请注意,从C#2开始,我认为可以使用默认值运算符:
int x = default(int);
Run Code Online (Sandbox Code Playgroud)
真的,感觉更接近于IL.我想如果我们开始使用它是可能的,C#就不会"假装"所有值类型都有无参数构造函数.
另一方面,考虑泛型:
public void Foo<T>() where T : new()
{
T t = new T();
}
Run Code Online (Sandbox Code Playgroud)
是否应该允许值类型?它是 - 但如果C#不允许,new int()那么以通用形式允许它就没有多大意义......
您可能希望更深入地看一个有趣的观点 - 尽管C#不允许您定义自定义值类型无参数构造函数,但您可以在IL中执行此操作,而C#有时会使用它(有时不会),具体取决于上下文.请参阅有关详细信息,我的博客文章.