码迷,mamicode.com
首页 > 其他好文 > 详细

进一步对泛型集合的思考

时间:2015-03-15 23:06:37      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:泛型集合

  一、前言:

  经常听师哥师姐们说底层这个底层那个,从没见过这个“底层”。后来师姐就在项目中应用了这个底层类库,从听说它到自己亲自用它,才发现它还真是强大的不得了啊!经常跟着师哥师姐们的课听,就是想跟这个底层混个“脸熟”。我也经常是不懂装懂,其实真正听懂的也没多少啊。。不仅脸熟了,还脸皮厚呢。。

  言归正传为什么又提起泛型集合了呢?第一次接触是在机房重构的时候,Data Table转换成泛型集合。后来敲这个系统的时候,看到封装的类库中绝大多数的返回结果都是泛型集合。委托和泛型的应用,反射和泛型(这些我听不懂的内容)。泛型集合的应用频率好高啊!!!虽然绝大多数的内容听不懂,但是听了还是有效果的,最起码让我进一步认识了泛型集合,还学会了一招,利用反射来获取泛型中的属性。



  二、泛型前身:


  进一步学习泛型集合,就必须要了解它的前身们,最开始是数组,在C#中的数据也算是一种对象了,数组固定长度、连续内存、读取速度快、但删除插入速度慢。

  再来就是集合类可以代替数组灵活管理着一堆对象,什么都可以包容,在集合类的面前,万物皆对象,也就是说它可以存任何的东西。一旦带上了“任何”两个字,我们就要进一步去讨论了,这样做是否要安全隐患呢?假如说,对某一集合,我们存储的都是int数据类型的,由于泛化都是Object,所以存入的时候会进行装箱,将栈区的转到堆区,也就是将int转为Object,在提取时,又会再拆箱,装箱拆箱动作不可避免带来的额外的性能开支。如果你不担心这个性能的问题,那么由于集合不加分辨,可以存储任何对象,那么如果我们把int,string或其他对象混装在同一集合中,在拆箱时,也许会由于拆箱不当带来错误,例如,我们想把一个字符串"AAAAA"拆为一个int数值,自然是不被允许的。




  三、安全,高效:


   看到了前身们都存在这样那样的局限性,在Net2.0中引入了泛型。泛型其实可以理解为一个强类型的集合类,在ADO.net中,也有类似的改进,那就是强类型Dataset的引入。泛型还是个集合,不过它是个确定了的存储对象类型的集合,这样,就绕过了装箱拆箱动作,也不会产生拆箱错误。可以这样认为,集合类是泛型的基类部分,泛型新引入的部分是对集合基类的多态扩展。




  四、方便,动态:


  除了以上的安全性,高效率之外,我还想到了一个泛型的优点。类型参数化,能够实现泛型定义的类或者方法将参数的指定,推迟到客户端声明或者实例化的时候。也就是说这个<T>是什么,可以先定义,以后想好了再写。同时它们不需要预知要放入多少元素,它们的内存会随着你不断的append元素自动增加。

 

  不知道大家有没有注意到从你新建一个类的命名空间来看,

using System.Collections.Generic;

微软已经默认帮你引入了System.Collection.Generic,这说明微软也是希望我们多多使用泛型集合的。哈哈。


  五、总结:


  对于泛型集合的认识的过程从少到多,做机房收费的时候,我就会简单的说:List<>方便安全效率高,现在我可以把这七个字稍微的解释一下。学习就是不断深入的一个过程,从不知道到知道一点到有一点自己的思考,难道不是一个开心的过程么!!!




进一步对泛型集合的思考

标签:泛型集合

原文地址:http://blog.csdn.net/zhou2s_101216/article/details/44280113

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!