A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 穷傻呆丑萌 中级黑马   /  2013-8-1 23:02  /  1442 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

上一个帖子图片不能看。。。好吧  再弄一次  估计这样就能看了


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

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

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

运行代码如下

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

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

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

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

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

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



3 个回复

正序浏览
回复 使用道具 举报
自己顶一个
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马