要理解泛型,就必须了解它的前身--集合类(如:ArrayList,Hashtable,SortedList等集合).集合类是可以代替数组以便灵活管理对象组.注意这里的用词,集合类是个数组(样的东西),集合类用来存储对象,什么是对象,Object.
集合类的好处是包容性强,万物皆对象,所以他能存任何东西.然而有利就有弊,在产生便利性的同时,它也带来了处理性能损失和错误风险提高的坏处.假如对某一集合,我们存储的都是int类型的数字,由于集合类存储的是对象,所以存入时会进行装箱,将int装为object,在提取时,又会再拆箱,装箱拆箱动作不可避免带来的额外的性能开支.此外,由于集合不加分辨,可以存储任何对象,那么如果我们把int,string或其他对象混装在同一集合中,在拆箱时,也许会由于拆箱不当带来错误,例如,我们想把一个字符串"AAAAA"拆为一个int数值,自然是不被允许的.
为避免这些弊端,在Net2.0中引入了泛型.泛型其实可以理解为一个强类型的集合类.在ADO.net中,也有类似的改进,那就是强类型Dataset的引入.毋庸置疑,泛型还是个集合,不过它是个确定了存储对象类型的集合,这样,就绕过了装箱拆箱动作,也不会产生拆箱错误.可以这样认为,集合类是泛型的基类部分,泛型新引入的部分是对集合基类的多态扩展. |