毫无疑问,范型最典型的应用莫过于范型集合了。在 .NET 2.0 中提供了已有集合类和接口的范型版本,它们位于 System.Collections.Generic 命名空间中。 .NET 2.0 中新的范型集合类并不是简单的在已有非范型集合类的设计上多加了个范型参数 T 而已。新的范型集合类的设计充分吸收了已有设计中的合理之处并摒弃了一些不甚合理之处,同时引入了新的针对范型的设计。所以,新的范型类和接口的设计应该更加合理和有效,不过 .NET 程序员则需要花些时间学习新的设计并了解与已有设计有什么样的不同,以及在将代码从非范型集合移植到范型集合时可能会出现的兼容性问题。 下面是范型集合和已有非范型集合的对照表(不全): 非范型接口 范型接口 非范型类 范型类 IEnumerator IEnumerator<T> ArrayList List<T> IEnumerable IEnumerable<T> Stack Stack<T> ICollection ICollection<T> Queue Queue<T> IList IList<T> DictionaryEntry KeyValuePair<K, V> IDictionary IDictionary<T> Hashtable Dictionary<K, V> IComparable IComparable<T> Comparer Comparer<T> IComparer IComparer<T> 可以看到,部分类的名字做了修改,例如 ArrayList 现在改为 List<T> 前面说过,新的范型集合接口/类和以前的非范型版本相比有较大的设计改变,下面我们来看看这些变化。 IEnumerator/IEnumerator<T> l IEnumerator<T> l C# 2.0 Iterators 提供了自动生成枚举器的方法,编译器自动为指定的类实现 IEnumerator 接口和 IEnumerator<T> ICollection<T> 除此之外,ICollection<T> l IsReadOnly,用于判断集合是否是只读的。 l Add/Remove/Clear,用于对集合元素进行管理。这些方法对列表和字典都是有效的。 l Contains,用于判断集合中是否包含指定的值。 另外,对于一些不需要更改集合的使用情景来说,提供一个类似 IReadOnlyCollection<T> 刚才提到,IList<T> List<T> List<T> IDictionary<K, V> Hashtable map = ...;
IEnumerator<T>
ICollection<T>
IList<T>
IDictionary<K, V>