泛型类实例化的理论
C#泛型类在编译时,先生成中间代码IL,通用类型T只是一个占位符。在实例化类时,根据用户指定的数据类型代替T并由即时编译器(JIT)生成本地代码,这个本地代码中已经使用了实际的数据类型,等同于用实际类型写的类,所以不同的封闭类的本地代码时是不一样的。
泛型类的静态成员
泛型类中数据类型的约束
泛型中的静态构造函数
泛型类中的方法重载
泛型类的方法重写
总结
C# 泛型是开发工具库中的一个无价之宝。它们可以提高性能、类型安全和质量,减少重复性的编程任务,简化总体编程模型,而这一切都是通过优雅的、可读性强的语法完成的。尽管 C# 泛型的根基是 C++ 模板,但 C# 通过提供编译时安全和支持将泛型提高到了一个新水平。C# 利用了两阶段编译、元数据以及诸如约束和一般方法之类的创新性的概念。毫无疑问,C# 的将来版本将继续发展泛型,以便添加新的功能,并且将泛型扩展到诸如数据访问或本地化之类的其他 .NET Framework 领域。
常用泛型
泛型类或接口 | 描述 |
---|---|
Collection< T >、ICollection< T > | 为泛型容器提供基类 |
Comparer< T >、IComparer< T >、IComparable< T > | 比较两个相同的泛型类型的对象是否相等、可排序 |
Dictionary<K,V>、IDictionary<K,V> | 表示用键/值对集合 |
Dictionary<K,V>.KeyCollection | 表示Dictionary<K,V>中键的集合 |
Dictionary<K,V>.ValueCollection | 表示Dictionary<K,V>中值得集合 |
IEnumerable< T >、IEnumerator< T > | 表示可以使用foreach迭代的集 |
KeyedCollection<T,U> | 表示有键值的集合 |
LinkedList< T > | 表示双向链表 |
LinkedListNode< T > | 表示LinkedList< T >中的节点 |
List< T >、IList< T > | 使用大小可按需动态增加的数组实现IList接口 |
Queue< T > | 表示对象的先进先出集合 |
ReadOnlyCollection< T > | 为泛型只读容器提供基类 |
SortedDictionary<K,V> | 表示键/值对的集合,这些键和值按键排序并可按照键访问,实现IComparer< T >接口 |
Stack< T > | 表示对象的简单的后进先出集合 |