什么情况下 使用泛型 为什么使用?

cxr5201314 2008-06-16 09:20:44


网上说的太具体 反而复杂难以理解,,,请高手帮忙下。
...全文
610 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
huanbiho 2009-06-21
  • 打赏
  • 举报
回复
提前定义容器(set,list,map)里的元素的类型;
在1.4的时候:
list.set(index,element)你放进list里的如果是String类型,那么
list.get(index);得到的是依然是Object类型,必须通过强制类型转换
(String)list.get(index)才能得到String类型,这太不合理了
到了1.5的时候:
如果你定义List<String> list = new ArrayList<String>();
那么在list.set(index,element)你想放进非<String>类型的元素,在编译的时候就会报错;
但是换来的好处是list.get(index)不用强制类型转换也能得到本来的元素类型的值。
535cheng110 2008-06-17
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 mike1lainet 的回复:]
顶 2楼 避免装箱拆箱操作,提高性能.
[/Quote]
mike1lainet 2008-06-17
  • 打赏
  • 举报
回复
顶 2楼 避免装箱拆箱操作,提高性能.
sjm2003 2008-06-17
  • 打赏
  • 举报
回复
类型不确定的时候,再用。
sxmonsy 2008-06-17
  • 打赏
  • 举报
回复
顶下二楼
stning 2008-06-17
  • 打赏
  • 举报
回复
提高得最多的,还是性能上。这个是我的理解
stning 2008-06-17
  • 打赏
  • 举报
回复
2楼解释得好
sh1618 2008-06-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jain2150 的回复:]
我先以我的理解来回答你,然后陪你一起等更正确全面的答案.

要理解泛型,就必须了解它的前身--集合类(如:ArrayList,Hashtable,SortedList等集合).集合类是可以代替数组以便灵活管理对象组.注意这里的用词,集合类是个数组(样的东西),集合类用来存储对象,什么是对象,Object.
集合类的好处是包容性强,万物皆对象,所以他能存任何东西.然而有利就有弊,在产生便利性的同时,它也带来了处理性能损失和错误风险提高的坏处.假如对某…
[/Quote]
cxr5201314 2008-06-17
  • 打赏
  • 举报
回复

谢谢。
Zine_Alone 2008-06-17
  • 打赏
  • 举报
回复
楼上的兄弟说的不错 ^_^

另外还有约束作用,比如一个泛型类,可以限定该类型必须继承或者实现某一接口.
jain2150 2008-06-17
  • 打赏
  • 举报
回复
我先以我的理解来回答你,然后陪你一起等更正确全面的答案.

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

cxr5201314 2008-06-17
  • 打赏
  • 举报
回复


自己UP 下

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧