C#面试题更新 2026-08-05

请说明C#中泛型在底层是如何实现的,其内部机制是怎样的?

技术原理C#

考察说明

考察对C#泛型运行时实现原理的理解,包括类型重用、代码生成和类型安全。

回答思路

  1. 【回答框架 1】C#泛型是运行时泛型,不同于C++模板的编译期展开。CLI规范定义了泛型类型,IL中包含泛型参数占位符。
  2. 【回答框架 2】JIT编译器为值类型(如int、double)生成专用代码,每个值类型实参对应一份实例化代码。
  3. 【回答框架 3】引用类型共享同一份代码,因为引用大小相同(指针大小),运行时用实际类型替换参数。
  4. 【回答框架 4】泛型类型元数据存储类型约束、基类和接口,校验时确保类型安全,避免运行时类型转换错误。
  5. 【回答框架 5】泛型类型可通过反射获取,并支持动态实例化,但大量值类型实参可能导致代码膨胀,需权衡。
  6. 【关键点 1】C#泛型是运行时泛型,IL包含类型参数。
  7. 【关键点 2】值类型获专用代码,引用类型共享代码。
  8. 【关键点 3】泛型提供类型安全且避免装箱拆箱。
  9. 【易错点 1】不要与C++模板混淆,模板是编译期展开,泛型是运行时支持。
  10. 【易错点 2】引用类型共享代码但类型参数替换为实际类型,并非完全无开销。
  11. 【易错点 3】值类型实参会生成多份JIT代码,过度使用可能造成代码膨胀。