我不太了解IL,CLR或JIT编译器。但我读到的是通用代码被编译为通用IL,只有JIT编译器最终使用提供的具体类型参数实例化通用代码。我觉得某些通用代码片段(方法或类)可能有多个版本,因为它们在内存中有不同的表示。例如,每种值类型(或其集合)都有一个版本,而所有引用类型的集合都有另一个版本。类型检查已经发生,因此JIT编译器只关心表示。
但是,new T()
或typeof(T)
这样的语句呢,其中T
是某些周围类/方法中的泛型类型参数?我的假设是,必须为T
的绝对每个可能的具体类型参数重新编译这些语句,因为代码实际上对于每个都是不同的。如果您不知道T
,您也无法知道要在new T()
中调用哪个构造函数,对吗?
了解这一点会很棒。