对于泛型的理解
如果希望构建一个集合容器,会用到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> 可以省去前两次的装箱/拆箱动作。