CLR via C# 学习笔记(七)
泛型
一、允许在引用类型、值类型、接口中定义泛型方法List< T >
优势:
- 源代码保护,不需要访问List< T >的源代码
- 类型安全
比如List< DateTime > Add(String) 之后会编译报错 - 性能好
由于类型安全,不需要强制类型转换,不如List[0] 不需要强制转成DateTime
与ArrayList相比 ,存引用类型差不多;存值类型List更快,因为ArrayList存储值类型也会大量装箱
二、IList接口 和 List类 的区别
- IList
IList myList = new List<String>();
myList = new List<int>();
- List
List<String> myList = new List<String>();
可以看到IList接口可以声明存放String后,可以更改为int,二List类不可以。
三、代码爆炸
- 造成原因:泛型使用过多,CLR为每种不同泛型的方法/类型生成本机代码
- CLR内部措施:
一个程序及使用List< DateTime >,另一个完全不同的程序集也是用List< DateTime >(两个程序集在同一个AppDomain中),那么List< DateTime >只编译一次方法
四、泛型约束
- 参数T实现IComparable接口
class Test<T> where T: IComparable
- T必须是引用类型、U必须是值类型
class Test<T, U> where T: class where U: struct