十二、 泛型(Generics )
CLR #泛型
📌 一、泛型基础结构(Generic Fundamentals)
💡 本质理解:
-
CLR 泛型是 延迟绑定泛型(Open Generics),在运行时根据实际类型参数 生成真实类型。
-
每个具体类型组合(如
List<int>和List<string>)会 JIT 编译生成独立代码版本(值类型场景),引用类型通常共享一个代码体。
🌟 示例:
publicclassBox
{
publicTValue;
}
🔍 IL 展开后是一个带占位符的模板类,JIT 时实例化为 Box<System.Int32> 等。
注意 根据Microsoft的设计原则,泛型参数变量要么称为 T, 要么至少以大写T开(如TKey和TValue)。大写 T代表类型(Type), 就像大写 I 代表接口(Interface)一样,比如 IComparable.
📌 二、泛型接口(Generic Interfaces)
-
支持行为抽象 + 类型安全
-
常用于集合(如
IEnumerable<T>、IComparer<T>)
publicinterfaceIRepository
{
TGetById(intid);
}
✅ 利于解耦业务逻辑与数据模型。
📌 三、泛型委托(Generic Delegates)
- 委托支持泛型类型参数:
publicdelegateTTransformer
-
FCL 提供大量泛型委托:
-
Func<T>,Func<T, TResult> -
Action<T>等
📌 四、协变 & 逆变(Covariance & Contravariance)
| 类型 | 方向 | 使用限制 |
|---|---|---|
协变 (out) |
派生类 → 基类 | 仅用于返回类型 |
逆变 (in) |
基类 → 派生类 | 仅用于参数类型 |
IEnumerable
IEnumerable
作者:世纪末的魔术师
出处:https://www.cnblogs.com/Firepad-magic/
Unity最受欢迎插件推荐:点击查看
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

浙公网安备 33010602011771号