对于泛型的理解

原文链接: http://www.cnblogs.com/huangwj21/archive/2010/07/22/1783193.html

如果希望构建一个集合容器,会用到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);

扫描二维码关注公众号,回复: 6779264 查看本文章

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> 可以省去前两次的装箱/拆箱动作。

转载于:https://www.cnblogs.com/huangwj21/archive/2010/07/22/1783193.html

猜你喜欢

转载自blog.csdn.net/weixin_30240349/article/details/94963585