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

C#-为什么类new()约束使用Activator.CreateInstance<;T>;()?,c#,clr,jit,C#,Clr,Jit,我只是问 在考虑了一会儿之后,我想知道为什么C#编译器会发出这样的IL 为什么它不能说一些IL,比如:“调用t的默认构造函数”?在CIL()中没有这样的指令 假设我们可以添加一个,这的另一个实现可能是,在类型的VTable中,我们在索引0处对默认构造函数进行索引,然后JIT可以假设此信息并发出代码,执行VTable查找,选择索引0并调用位于VTable中该条目0所指地址处的函数 如您所见,这需要更改CLR数据结构,可能需要更改每个对象的布局,还可能需要更改值类型的不同解决方案(我忽略这种情况,因

我只是问

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


为什么它不能说一些IL,比如:“调用t的默认构造函数”?

在CIL()中没有这样的指令

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


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

可能是因为T类型在运行时之前是未知的,如果它没有默认构造函数怎么办?如果它没有默认构造函数,你就不能将它与需要有构造函数的方法一起使用。副本中答案中的博客文章有很多信息-这不是副本,那篇文章只是给出了一些解释ning,我在问为什么不呢?JIT可以优化CreateInstance调用,这将导致最佳性能。不知道是否这样做。可能不是因为我们讨论的是.NET JIT。如果有疑问,它肯定不会优化。更新:C#编译器会进行部分优化,因为JIT未能: