C# – 为什么class,new()约束使用Activator.CreateInstance ()?

我刚刚问过C# – new()约束的generics如何生成机器代码?

在思考了一段时间之后,我想知道为什么C#编译器会像这样发出IL。

为什么不能说一些IL喜欢:“调用T的默认构造函数”?

CIL中没有这样的指导( http://www.ecma-international.org/publications/standards/Ecma-335.htm )。

假设我们可以添加一个,另一个实现可能是在Type的VTable中我们使默认构造函数在索引0处被索引,然后JIT可以采用此信息并发出执行VTable查找的代码,选择索引0和调用位于VTable中此条目0所指向的地址的函数。

正如您所看到的,这需要更改CLR数据结构,可能是每个对象的布局,并且可能是值类型的不同解决方案(我忽略了这种情况,因为您特别说class和new()。