如何编译'new T()'或'typeof(T)'?

时间:2018-03-04 14:37:57

标签: c# generics compilation jit

我不太了解IL,CLR或JIT编译器。但我读到的是通用代码被编译为通用IL,只有JIT编译器最终使用提供的具体类型参数实例化通用代码。我觉得某些通用代码片段(方法或类)可能有多个版本,因为它们在内存中有不同的表示。例如,每种值类型(或其集合)都有一个版本,而所有引用类型的集合都有另一个版本。类型检查已经发生,因此JIT编译器只关心表示。

但是,new T()typeof(T)这样的语句呢,其中T是某些周围类/方法中的泛型类型参数?我的假设是,必须为T的绝对每个可能的具体类型参数重新编译这些语句,因为代码实际上对于每个都是不同的。如果您不知道T,您也无法知道要在new T()中调用哪个构造函数,对吗?

了解这一点会很棒。

0 个答案:

没有答案