1. 概述
泛型(generic)是CLR和编程语言提供的一种特殊机制,它支持另一种形式的代码重用,即“算法重用”。
泛型为开发人员提供了以下优势:
① 源代码保护。(针对C++的模板技术)
② 类型安全。
③ 更加清晰的代码。(减少转型次数)
④ 更佳的性能。(值类型无需装箱)
2. 名词解释
① 代码爆炸:泛型类型在编译时,CLR要为每种不同的方法/类型组合生成本地代码。它可能造成应用程序的工作集显著增大,影响性能。
3. 主要内容
3.1 Framework类库中的泛型
FCL定义的几个泛型集合类,大多数在 System.Collections.Generic 和 System.Collections.ObjectModel命名空间中。
要使用现成安全的集合类,可以去 System.Collections.Concurrent命名空间找寻。
System.Array类(所有数组类型的基类)提供了大量静态泛型方法。
3.2 Wintellect 的 Power Collections 库
Wintellect制作了Power Collections 库,使CLR程序员也能使用C++标准模板库(STL)的部分集合类。
3.3 泛型基础结构
3.3.1 开放类型和封闭类型
具有泛型类型参数的类型成为 开放类型,CLR 禁止构造开放类型的任何实例。
3.3.2 泛型类型和继承
泛型类型仍然是类型,所以它能从其他任何类型派生。
3.3.3 泛型类型同一性
3.3.4 代码爆炸
CLR内建了一些优化措施来缓解代码爆炸:
① 假如为一个特定的类型实参调用了一个方法,以后再次使用相同的类型实参来调用时,CLR只会为这个方法/类型组合编译一次代码。
② CLR认为所有引用类型实参都是完全相同的,所以代码能够共享。
3.4 泛型接口
一个引用类型或值类型可通过指定类型实参的方式来实现泛型接口,也可以保持类型实参的未指定状态来实现一个泛型接口。
3.5 泛型委托
3.6 委托和接口的逆变和协变泛型类型实参(好拗口)
未完待续。。。