1.性能:
泛型的一个主要优点是性能,这是泛型比集合优越的原因。System.Collections.Generic名称空间中的List<T>类不使用对象,而是在使用时定义类型。
使用ArrayList类,在存储对象的时候,执行装箱操作,而在读取值的时候,进行拆箱。如:
var list = new ArrayList(); list.Add(44);//boxing-convert a value type to a reference type int i1 = (int)list[0];//unboxing-convert a reference type to a value type foreach(int i2 in list) { Console.WriteLine(i2); }
对值类型使用非泛型集合类,在把值类型转换为引用类型,和把引用类型转换成值类型时,需要进行装箱和拆箱。
装箱和拆箱操作很容易使用,但性能损失比较大,遍历许多项时尤其如此。
2.类型安全:
泛型的另一个特征是类型安全,在泛型类List<T>中,泛型类型T定义了允许使用的类型。而ArrayList可以存储不同的对象,在遍历时容易出错。
3.二进制代码的重用:
泛型允许更好地重用二进制代码。泛型类可以定义一次,并且可以用许多不同的类型实例化。泛型类型可以在一种语言中定义,在任何其它.NET语言中使用。
4.命名约定:
命名规则:
- 泛型类型的名称用字母T作为前缀。
- 如果没有特殊的要求,泛型类型允许用任意类代替,且只使用了一个泛型类型。就可以用字符T作为泛型类型的名称。
-
public class List<T> { } public class LinkedList<T> { }
- 如果泛型类型有特定的要求(例如,它必须实现一个借口或派生自基类),或者使用了两个或多个泛型类型,就应给泛型类型使用描述性的名称。
-
public delegate void EventHandler<TEventArgs>(object sender,TEventArgs e); public delegate TOutput Converter<TInput, TOutput>(TInput from); public class SortedList<TKey, TValue> { }