探秘泛型:类型参数化革命
泛型是 C# 和.NET
框架中一项革命性的特性,它实现了 “编写一次,多处复用” 的抽象能力,同时保持了静态类型的安全性和高性能。与 C++ 模板等其他语言的泛型机制不同,.NET 泛型在 CLR(公共语言运行时)层面提供原生支持,这使得它兼具灵活性、安全性和效率。本文将从.NET 框架底层出发,全面解析泛型的类型系统、实现机制、性能特性及高级应用,揭示其在 CLR 中的运行原理。
一、泛型的类型系统:CLR 的类型参数化革命
在泛型出现之前,.NET 通过object
类型实现通用代码(如ArrayList
),但代价是频繁的装箱 / 拆箱和类型转换。泛型的核心创新是类型参数化,允许在定义类型或方法时使用未指定的类型参数,在使用时再指定具体类型。
1. 开放类型与封闭类型:泛型的两种形态
CLR 将泛型类型分为两种基本形态:
- 开放类型(Open Type):未指定全部类型参数的泛型类型,如
List<T>
、Dictionary<TKey, TValue>
。这类类型仅存在于编译期和元数据中,不能直接实例化。 - 封闭类型(Closed Type):已指定所有类型参数的泛型类型,如
List<int>
、Diction