上一个帖子图片不能看。。。好吧 再弄一次 估计这样就能看了
泛型是.net2.0提出的一个概念,发展到目前已使用的非常广泛,泛型对于整个C#具有很重要的意义,微软对此技术非常重视,未来几年内,在.NET开房中,泛型都将是一种主流技术,前面的代码在默认的情况下,创建的类引入命名空间就包括对泛型的支持,会自动映入System.Collections.Generie,说明系统建议我们使用集合时选用泛型集合,由此可以看出微软对泛型基础的支持程度。
强类型和弱类型,语言都有各自的优点,在描述通用型模型方面,强类型语言就存在缺陷,如HashTable和ArrayList可以存储任意类型的元素,倒置集合中存储的数据类型各异,但是从集合中取出的数据都是Object乐行,必须通过转换,这些都为了程序带来了很多不便,C#为了解决这方面的问题,引入了泛型
下面我们创建一个电话本的类,将其存储在HashTable中,现在穿件一个记事本类,用来记录重要的事件。
建立这个类后,实例化一个记事本对象,添加到HashTable集合中去
运行代码如下
从代码运行结果可以看出 3个对象都已经存储在哈希表ht中,如果从哈希表检索元素的值,应该如何做呢,下面的常用的方法
遍历哈希表时必须进行类型转换,因为存储了电话本,所以代码强制转换为TelNote时,运行此代码就会出现异常如下
分析产生异常的原因,发现存储在哈希表中的数据了类型不一致,有一个集合元素是Nostes型,强制换就会出错。根本原因在于ArrayList和HashTable集合吧每个元素都当做Object类型。检索元素是,对存储元素时不做类型检查,进行了装箱操作,讲所有数据类型都转换成Object,检索元素对存储元素进行拆箱才可以还原数据类型,如此频繁的进行装箱,拆箱的操作对系统的性能提出了更高的要求,通吃每次都要强制类型转换也很麻烦,容易出错,为了解决这个问题,C#引入了泛型技术,讲上面的代码用泛型集合修改如下:
观察发现,只是将前面代码创建哈比表对象,修改成为这段代码中泛型集合,此时运行会出现编译错误,原因是添加Nostes类型数据引起的,说明此集合在进行了类型检测,保证了数据的类型安全 代码取代再次运行铭刻正确的输出集合中的元素,在上面这段代码中遍历集合元素时,其实根本不需要进行类型转换就可以处处。这种集合类型就属于泛型集合
接下来总结了一下泛型优点
性能高,可以避免装箱拆箱操作,提高性能
类型安全,泛型集合对其存储对象进行了类型约束,不是定义时声明的类型,是无法存储到泛型集合中去的,保证额数据的类型安全
代码重用,使用泛型类型可以最大限度的重用代码,保护类型安全级提高性能
|