C# - 为什么class,new()约束使用Activator.CreateInstance <t>()?

时间:2015-09-13 19:28:22

标签: c# clr jit

我刚问过C# - How do generics with the new() constraint get machine code generated?

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

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

1 个答案:

答案 0 :(得分:2)

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

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

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