对于泛型的理解

如果希望构建一个集合容器,会用到ArrayList array = new ArrayList();

ArrayList有几个缺点:1 无法保证容器中的类型安全(类型一致问题)

2 存进arralist的数据,CIL会自动进行装箱,也就是保存进ArrayList中的都将是Object类型;(进行了不必要的撞向拆箱问题)

关于问题1的解释:

而泛型的出现,解决了上面两个问题

一般情况下,存进array通常都是同一种类型。但ArrayList无法去控制类型相同,也就是说,下面这段代码不会抛出异常:

string newstring = "Hello World";

int i ;

Car car = new Car("carname"); // 一个假设的类

array.Add(a);

array.Add(i);

array.add(car);

假设要控制这个array去存储相同的类型,只能够用如下类来实现:

public class CarCollection: IEnumberable

{

  private ArrayList arCars = new ArrayList();

  public CarCollection(){}

  public Car GetCar(int pos)

  {

    return (Car)arCars[pos]; 

  }

  

  public void AddCar(Car c)

  {

    arCars.Add(c);

  }

  .......

}

假如有众多的类需要类型安全的容器对象,则需要添加多个容器类,导致大量重复代码以及困难的维护工作。

List<T>就可以解决这个问题。

 

关于问题2的解释:

ArrayList array = new ArrayList();

array.Add(10); //装箱

int i = (int)array[0]; //拆箱

Console.WriteLine("The Value of array[0] is" + i); //装箱

想想一下,如果用List<int> 可以省去前两次的装箱/拆箱动作。

posted @ 2010-07-22 17:19  growing pain  阅读(132)  评论(0编辑  收藏  举报