C#编译器如何与泛型一起使用?

4 .net c# generics cil cil-metadata

在C++中,template声明需要在头文件中(除非您明确声明模板类型),我明白了解原因.

我没有得到的是如果C#编译器没有.cs要检查的文件,它如何处理泛型.我怀疑它会检查CIL,因为这将是一个处理器密集型操作.我知道它能够从元数据中提取类型信息,但如果通用函数的代码也被编码,那么对于可执行文件来说将是一个巨大的膨胀.

那么,再次,编译器如何使用泛型?

pho*_*oog 8

我想你问的是C#编译器如何使用引用程序集中定义的泛型类型,而不是询问C#编译器如何编译定义泛型类型的.cs文件(因为你说"如果它没有.cs文件").

通用类型和成员在IL中编码为通用.封闭的泛型类型和成员由jit编译器在运行时构造.所以对你的问题的简单回答是"C#编译器通过发出IL来处理泛型类型,导致jit编译器在运行时构造它们."

  • 并且这种对泛型的CLR支持意味着您可以在运行时通过反射发明新的构造类型(即,在指定类型参数时由泛型类型产生的类型). (4认同)