黑马程序员技术交流社区

标题: 关于泛型 [打印本页]

作者: 穷傻呆丑萌    时间: 2013-8-1 23:02
标题: 关于泛型
上一个帖子图片不能看。。。好吧  再弄一次  估计这样就能看了


泛型是.net2.0提出的一个概念,发展到目前已使用的非常广泛,泛型对于整个C#具有很重要的意义,微软对此技术非常重视,未来几年内,在.NET开房中,泛型都将是一种主流技术,前面的代码在默认的情况下,创建的类引入命名空间就包括对泛型的支持,会自动映入System.Collections.Generie,说明系统建议我们使用集合时选用泛型集合,由此可以看出微软对泛型基础的支持程度。

强类型和弱类型,语言都有各自的优点,在描述通用型模型方面,强类型语言就存在缺陷,如HashTable和ArrayList可以存储任意类型的元素,倒置集合中存储的数据类型各异,但是从集合中取出的数据都是Object乐行,必须通过转换,这些都为了程序带来了很多不便,C#为了解决这方面的问题,引入了泛型
下面我们创建一个电话本的类,将其存储在HashTable中,现在穿件一个记事本类,用来记录重要的事件。

建立这个类后,实例化一个记事本对象,添加到HashTable集合中去

运行代码如下

从代码运行结果可以看出 3个对象都已经存储在哈希表ht中,如果从哈希表检索元素的值,应该如何做呢,下面的常用的方法

遍历哈希表时必须进行类型转换,因为存储了电话本,所以代码强制转换为TelNote时,运行此代码就会出现异常如下

分析产生异常的原因,发现存储在哈希表中的数据了类型不一致,有一个集合元素是Nostes型,强制换就会出错。根本原因在于ArrayList和HashTable集合吧每个元素都当做Object类型。检索元素是,对存储元素时不做类型检查,进行了装箱操作,讲所有数据类型都转换成Object,检索元素对存储元素进行拆箱才可以还原数据类型,如此频繁的进行装箱,拆箱的操作对系统的性能提出了更高的要求,通吃每次都要强制类型转换也很麻烦,容易出错,为了解决这个问题,C#引入了泛型技术,讲上面的代码用泛型集合修改如下:

观察发现,只是将前面代码创建哈比表对象,修改成为这段代码中泛型集合,此时运行会出现编译错误,原因是添加Nostes类型数据引起的,说明此集合在进行了类型检测,保证了数据的类型安全 代码取代再次运行铭刻正确的输出集合中的元素,在上面这段代码中遍历集合元素时,其实根本不需要进行类型转换就可以处处。这种集合类型就属于泛型集合

接下来总结了一下泛型优点

性能高,可以避免装箱拆箱操作,提高性能
类型安全,泛型集合对其存储对象进行了类型约束,不是定义时声明的类型,是无法存储到泛型集合中去的,保证额数据的类型安全
代码重用,使用泛型类型可以最大限度的重用代码,保护类型安全级提高性能




作者: 穷傻呆丑萌    时间: 2013-8-5 01:41
自己顶一个
作者: 彭家贰小姐    时间: 2013-8-5 09:25





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2