c# -为什么类new()约束使用Activator.CreateInstance()

本文关键字:Activator CreateInstance 约束 为什么 new | 更新日期: 2023-09-27 18:12:44

我刚刚问c# -如何与新的()约束泛型得到机器码生成?

在思考了一会儿之后,我想知道为什么c#编译器会发出这样的IL。

为什么不能这样写:"调用T的默认构造函数"?

c# -为什么类new()约束使用Activator.CreateInstance<T>()

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

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

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