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

C# - Why does a class, new() constraint use Activator.CreateInstance<T>()?

我刚问了

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

为什么它不能说一些像这样的 IL:"Call T's default constructor"?

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

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

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