C#泛型如何提高性能的

C#里讲泛型可以减少装箱和拆箱,那泛型参数的原始类型是什么?java中的类型参数擦除后为Object,并且强制转换是编译器自动插入的。那为什么C#说能减少装箱和拆箱?难道... C#里讲泛型可以减少装箱和拆箱,那泛型参数的原始类型是什么?java中的类型参数擦除后为Object,并且强制转换是编译器自动插入的。那为什么C#说能减少装箱和拆箱?难道说c#泛型模板实例化后产生一个不同的类型吗? 展开
 我来答
赏健奉音华
2019-11-13 · TA获得超过3686个赞
知道大有可为答主
回答量:3156
采纳率:32%
帮助的人:218万
展开全部
在CLR1.0中,要创建一个灵活的类或方法,者握但该类或方法在编译首斗庆期间不知道使用什么类,就必须以Object类为基础。而Object类在编译期间没有类型安全性。因此必须进行强制类型转换。另外,给值类型使用Object类会有性能损失。
CLR2.0(.Net
3.5
基于CLR2.0)提供了泛型。有了泛型,就不需要Objcet类。
System.Collections.Generic命名空间中的List
<T>类不使用对象,而是在使用定义类型。
泛型优点1:性能。
值类型存储在堆栈上,引用类型储存在堆上。
C#类是引用类型,结构是值类型。.Net很容易把值类型转换为引用类型。所以可以在需要对象(对象是引用类型)的任意地方使用值类型。
例如:int可以赋予一个对象,从值类型转换为引用类型成为装箱,如果方法需要吧一个对象作为参数,而且传送了一个值类型。装箱操作就会自动进行。另一方面,装箱的值类型可以使用拆箱操作转换为值类型。在拆箱时,需要使用类型转换运算符。
装箱和拆箱操作性能损失比较大。遍历许多项时尤其如此。
System.Collections.Genriec名称空间中的List<T>类不使用对象,而是在使用时定义类型。当List<T>的泛型类型定义为int,int类型在JIT编译器动态生成的类中使用,不再进行装箱和拆箱操作
泛型优点2:类型安全
如果在ArrayList类中添加一个整数、一个字符串、一个MyClass类型的对象,如果这个集合使用Foreach语句迭代并转换为Int那么会出现异常。
在泛型类List<T>中,泛型类型T定义了允许使用的类型。有了List<int>的定义。就只能吧整数类型添加到集合中。
泛型优点3:二进制代码的重用。
泛型允许更好地重用二进制代码。泛型类定义一次,用许多不同的类型实例化。
泛型类型可以在一种语言中定义,在另一种.Net
语销纳言中使用。
泛型优点4:代码扩展。
wancy86
2013-03-30 · TA获得超过191个赞
知道小有建树答主
回答量:228
采纳率:0%
帮助的人:50.7万
展开全部
一次全告诉你吧。
1.C#里的泛型是类型安全的,定义的时候使用T,D占位标示,但是实例化一个实例的时候必须制定明确的类型,不存在类型上的转换谨裂。
2.C#的泛型性能更好,为什么呢?这个是相对使用继承而言的,实现类似祥缓闭的功能你当然可以使用Object作为基类,这样你就可以什么类型都传了,但是使用泛型,他在编译的时候使用替换占位标示的方式,先比哪运之下不就是省去了装箱和拆箱的过程吗?
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
没排名排名C2
2013-03-30 · TA获得超过275个赞
知道小有建树答主
回答量:190
采纳率:0%
帮助的人:174万
展开全部
你说的不懂哦拦槐,所谓的泛型就是集合,只是把目标只存进去。就好像在PHP中从数据库中读取的数据存入数组中一样一喊衡滚样的。只是叫的名称不郑余一样而已。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友a97606d
2013-03-30 · TA获得超过190个赞
知道小有建树答主
回答量:210
采纳率:0%
帮助的人:155万
展开全部
没错行哗迹,对不同的参数会生成不同的类型
想验证可以用一个static变量,芦枯看看不同类档并型是不是有不同的值
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
帮助试着
2013-03-30
知道答主
回答量:39
采纳率:0%
帮助的人:5.7万
展开全部
到打死低洼速度瓦斯弹
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式