泛型优缺点

它有什么优势?它对性能有影响吗?它在执行时的行为是什么?.NET BCL中有哪些泛型类型?举例说明平时编程中您定义的泛型类型。  泛型的作用在于“算法的重用”。(这点其实很好理解,原来的ArrayList只能接受Object,现在通过List可以接受任何类型,也就是说ArrayList的方法都被各个类型重用了。但是Dot Net的泛型有个比较制肘地方,就是你很难对数值类型(值类型)进行算法抽象,因为这牵涉到运算符重载的问题,同时Dot Net的泛型的类型参数也不能约束成一个基元值类型(如int、double、float) 。) 它有什么优势? 第一:源代码保护。(如果你知道C++模板对泛型的实现机制,就会知道C++在编译的时候根据对泛型的调用,自动“内联”了一个实现,这样泛型的内容就暴露了,尔DotNet的实现方式就不同了,泛型类和方法会被编译成IL,在执行的时候由JIT负责将IL变化为指定类型参数的本地代码,从而保护了源代码) 第二:类型安全。(这点是最显而易见的,抛弃了使用ArrayList时各种丑陋的强制类型转换) 第三:更清晰地代码。因为没有了强制类型转换,所以代码自然显得更清晰,但是使用泛型时候带来的<>有时候确实也会让人搞糊涂,幸好泛型方法可以用类型推断或者using语句来进一步简化写法。 第四:更好的性能,因为值类型可以避免装箱和拆箱所带来的损耗(垃圾回收的次数也会减少)。(这点正是泛型神奇的地方,开发历史上抽象能力的上升往往意味着性能的下降,但是泛型却不是!泛型抽象了算法,但是C++和DotNet对泛型的实现能够让性能无损,并且更快。Java的擦除法泛型就没有这种性能上的好处。) 它对性能有影响吗? 对性能有积极的影响,因为值类型可以避免装箱和拆箱所带来的负面影响,避免了垃圾回收,使得性能显著提高。但是对引用类型这种影响就不明显了。但是需要注意的是首次为一个特定数据类型调用方法时,CLR都会为这个方法生成本地代码。这会增

大应用程序的工作集大小,从而影响性能。 它在执行时的行为是什么? 使用泛型类型参数的一个方法在进行JIT编译时,CLR获取IL,用指定的类型实参进行替换,然后创建本地代码。需要特别注意的是引用类型是共享代码的,而对值类型就会为每一种生成独立的一份类型代码。但是需要指出的是引用类型的这种代码共享并不会造成封闭类型只执行一次构造函数(就算是静态构造函数也是这样的)。 .NET BCL中有哪些泛型类型? List、Dictionary、Queue、Stack、SortedList和SortedDictionary、LinkedList等等。 举例说明平时编程中您定义的泛型类型。泛型的出现会替换原来一部分使用多态的地方从而提高性能和带来更好的编译时检查,这样就不需要在子类和超类(接口)间频繁转换了。
时间: 2024-08-31 14:35:58

泛型优缺点的相关文章

android Asynctask的优缺点?能否同时并发100+asynctask呢?

一  Asynctask的优缺点? AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主线程. 优点: 1.简单,快捷 2.过程可控 3.使用的缺点: 缺点: 在使用多个异步操作和并需要进行Ui变更时,就变得复杂起来. Android的AsyncTask比Handler更轻量级一些,适用于简单的异步处理. 首先明确Android之所以有Handle

Java 泛型 Java使用泛型的意义

Java 泛型 Java使用泛型的意义 @author ixenos 直接意义 在编译时保证类型安全 根本意义 a) 类型安全问题源自可复用性代码的设计,泛型保证了类型安全的复用模板 b) 使用复用性模板时不用手动强制类型转换 三种泛型实现方式的优缺点 C++:模板方式实现,在编译时完全展开并且支持偏特化,类型精度高,代码共享差: Java 5:擦除方式实现,仅用于编译时类型检查,在运行时擦除,向后兼容性好,代码共享好,类型精度非常差: C# 2.0:混合方式实现,在运行时展开特化,类型精度高,

比较List和ArrayList的性能及ArrayList和LinkedList优缺点

List和ArrayList的性能比较 在使用ArrayList这样的非泛型集合的过程中,要进行装箱和拆箱操作,会有比较大的性能损失,而使用泛型集合就没有这样的问题.List是泛型,而ArrayList是非泛型.存数据岛ArrayList都需要专程object,读取又要转换成相应的数据类型,List则不需要. //用来记录开始和结束的时间 DateTime startTime = new DateTime(); DateTime endTime = new DateTime();//定义集合类型

泛型集合的使用

对于机房收费系统的重构.从大的方面来看.无非就是对于数据库的四个操作.增删改查.而且我们用的是三层架构进行重构.D层用来和数据库打交道.进行这四个操作就须要有返回值,增删改在这里不多说.可是当进行查的时候.d层须要数据给b层,那么我们以什么样的形式返回最好呢? 刚開始接触三层的时候,我返回的是datatable,就是dt.Rows[0]["xxx"]的形式,感觉实现了.就非常厉害了,后来通过与大家交流发现,事实上另一种更好用的方法.就是利用实体类填充泛型集合. 那么问题就出来了: 1.

java夯实基础系列:泛型

一.概念 1.为什么需要泛型? 不使用泛型时: public class Test01 { public static void main(String[] args) { HashMap map = new HashMap(); map.put("m1", "sssss"); String str = (String)map.get("m1"); } } 使用泛型后: public class Test01 { public static vo

浅谈后端语言优缺点

兄弟连教育在前不久,回答了一个关于后端语言选型的问题,那么后端语言都有哪些,存在什么样的优缺点?因此兄弟连与大家分享一下心得. 语言优缺点 C/C++ C 语言虽然是非常贴近操作系统的语言,能和操作系统 API 很好的交互,但是 C 语言并没有现代化工程开发所需要的面向对象功能,当然也缺乏泛型之类的功能,如果以 CGI 的形式开发,那么缺点非常明显,这也是第二代后端平台兴起的原因. C++ 具有现代化工程开发所需要的各种功能,但是它同样有缺点: 缺乏字符串处理,Web 开发最主要的就是字符串的处

Spring的泛型依赖注入

Spring 4.x 中可以为子类注入子类对应的泛型类型的成员变量的引用,(这样子类和子类对应的泛型类自动建立关系)具体说明: 泛型注入:就是Bean1和Bean2注入了泛型,并且Bean1和Bean2建立依赖关系,这样子类Bean3(继承bean1)和bean4(继承bean2)就会自动建立关系 不是泛型注入:就是说Bean1和Bean2都没有注入泛型,只是建立了关系,子类Bean3(继承bean1)和bean4(继承bean2)也会自动建立关系 泛型依赖注入的实现步骤: 1新建两个泛型类,并

Android面试,简要介绍一下asynctask和handler的优缺点

1 )AsyncTask实现的原理,和适用的优缺点 AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主线程. 使用的优点: l  简单,快捷 l  过程可控 使用的缺点: l 在使用多个异步操作和并需要进行Ui变更时,就变得复杂起来. l 最大并发数不超过5 2 )Handler异步实现的原理和适用的优缺点 在Handler 异步实现时,涉及到

android Asynctask的优缺点?是否能同一时候并发100+asynctask呢?

一  Asynctask的优缺点? AsyncTask,是android提供的轻量级的异步类,能够直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步运行的程度(能够通过接口实现UI进度更新),最后反馈运行的结果给UI主线程. 长处: 1.简单,快捷 2.过程可控 3.使用的缺点: 缺点: 在使用多个异步操作和并须要进行Ui变更时,就变得复杂起来. Android的AsyncTask比Handler更轻量级一些,适用于简单的异步处理. 首先明白Android之所以有Handle