C#高级编程读书笔记之泛型的优点

泛型是.NET2.0新提供的特性。
一、泛型的一个主要优点就是性能。
在出现泛型之前,如果对值类型使用集合类,就必须把值类型装箱成引用类型,然后加入到集中中,在使用集合时,又需要把引用类型拆箱成值类型。如下面的示例显示了System.Collections命名空间中的ArrayList类,ArrayList存储对象,Add()方法定义为需要把一个对象作为参数,所以要装箱一个整数类型,读取时又要进行拆箱。
ArrayList list = new ArrayList();
list.Add(
10);
int i1 = (int)list[0];
foreach(int i2 in list)
{
Console.WriteLine(i2);
}
装箱和拆箱的实现都不复杂,但性能损失较大,如果迭代的项数多时对性能的损失更为明显。
为了避免这种性能的损失,到了.NET2.0后,就可以使用泛型。
System.Collections.Generic命名空间中List<T>类不使用对象,而是在使用时定义类型。下面示例,List<T>类的泛型类型定义为int,所以int类型在JIT编译器动态生成的类中使用,不再进行装箱和拆箱的操作,从而就避免了这方面的性能损失。
List<int> list = new List<int>();
list.Add(
10);
int i1= list[0];
foreach(int i2 in list)
{
Console.WriteLine(i2);
}
二、泛型的另外一个特点就是类型安全
在普通集合中,可以在这个集合中添加任何类型,如在ArrayList类型的集合中,可以添加整数,字符串等类型的对象,如果这个时候用foreach去迭代集合中的元素,就会产生异常。
错误应该尽早发现。在泛型类List<T>中,泛型类型T定义了运行使用的类型,即除了T这种类型,其它类型无法添加到泛型的集合中去。
三、二进制代码的重用
泛型允许更好地重用二进制代码,泛型类可以定义一次,用许多不用类型实例化。如定义List<T>泛型类,则可以用int,字符串等类型实例化。
List<T> intList = new List<T>();
intList.Add(
10);

List
<string> stringList = new List<string>();
stringList.Add(
"aryang");

posted on 2009-07-29 10:03  边写边唱  阅读(473)  评论(2编辑  收藏  举报

导航