面向对象的开发人员都深谙这种编程方式的好处。其中一个好处就是“代码重用”,它极大提高了开发效率。

泛型(generic)是CLR和编程语言提供的一种特殊机制,它支持另一种形式的代码重用,即“算法重用”。

简单说,开发人员先定义好算法,比如排序、搜索、交换、比较或者转换等。但是,定义算法的开发人员并不设定该算法要操作什么数据类型;该算法可广泛地应用于不同类型的对象。然后,另一个开发人员只要指定了算法要操作的具体数据类型,就可以开始使用这个算法了。

大多数算法都封装在一个类型中,CLR允许创建泛型引用类型和泛型值类型。但不允许创建泛型枚举类型。此外,CLR还允许创建泛型接口和泛型委托。方法偶尔也封装有用的算法,所以CLR允许在引用类型、值类型或接口中定义泛型方法。

//--

比如   List<T>等

//--

泛型为开发人员提供了以下优势:

1.源代码保护

使用泛型算法的开发人员不需要访问算法的源代码。

2.类型安全

将泛型算法应用于一个具体的类型时,编译器和CLR能理解开发人员的意图,并保证只有与指定数据类型兼容的对象才能用于算法。试图使用不兼容类型的对象会造成编译时错误,或在运行时抛出异常。

3.更清晰的代码

由于编译器强制类型安全性,所以减少了源代码中必须进行的强制类型转换次数,使代码更容易编写和维护。

4.更佳的性能

没有泛型的时候,要想定义常规化的算法,它的所有成员都要定义成操作object数据类型。要用这个算法来操作值类型的实例,CLR必须在调用算法的成员之前对值类型实例进行装箱。装箱造成在托管堆上进行内存分配,造成更频繁的垃圾回收,从而损害应用程序的性能。由于现在能创建一个泛型算法来操作一种具体的值类型,所以值类型的实例能以传值方式传递,CLR不在需要执行任何装箱操作。此外,由于不再需要进行强制类型转换,所以CLR无需验证这种转型是否类型安全,这同样提高了代码的运行速度。

VLR via C# 泛型相关推荐

  1. 【C#】集合_哈希表_字典_泛型_文件

    数组能做到:存放同种类型数据,且数据个数确定 object类型的数组能满足:放各种类型的数据,确定放多少个,但是随意插入元素,数组做不到 集合能做到:存放各种数据类型,且不确定存放多少个,能做到随意插 ...

  2. 2021年大数据常用语言Scala(三十六):scala高级用法 泛型

    目录 泛型 定义一个泛型方法 定义一个泛型类 上下界 协变.逆变.非变 非变 协变 逆变 泛型 scala和Java一样,类和特质.方法都可以支持泛型.我们在学习集合的时候,一般都会涉及到泛型. sc ...

  3. 对比两个同类型的泛型集合并返回差异泛型集合 ——两个List类名的比较

    1: /// <summary> 2: /// 对比两个同类型的泛型集合并返回差异泛型集合 3: /// </summary> 4: /// <typeparam nam ...

  4. 利用委托和泛型实现树的常用操作

    在日常开发中,经常遇到对树的操作,我们可以利用泛型和委托对这些树进行操作,这样就不需要每有一个树就要实现相应的功能了. 源码在http://files.cnblogs.com/haiconc/Lang ...

  5. java 泛型 父子,Java泛型-mb601cf8a78cc07的博客-51CTO博客

    Java泛型 泛型类 即把不确定的数据元素类型用一个泛型占位符表示@Data public class Person { private T name; private T address; }Per ...

  6. java 泛型 .net_Java基础11:Java泛型详解

    本文对java的泛型的概念和使用做了详尽的介绍. 本文参考https://blog.csdn.net/s10461/article/details/53941091 具体代码在我的GitHub中可以找 ...

  7. java 获取泛型的type,如何获取泛型的Type类型

    开发中很多时候都遇到或使用到泛型.例如在json转换成bean对象或其他对象,而对象中存在泛型,这时候需要用到TypeToken. Type:是java里的 java.lang.reflect.Typ ...

  8. Java中创建泛型数组

    Java中创建泛型数组 使用泛型时,我想很多人肯定尝试过如下的代码,去创建一个泛型数组 T[] array = new T[]; 当我们写出这样的代码时编译器会报Cannot create a gen ...

  9. 第八章 泛型程序设计

    1.带有[超类型限定 super]的通配符可以向泛型对象写入,带有[子类型限定 extends]的通配符可以从泛型对象读取,反之则不然. 转载于:https://www.cnblogs.com/bao ...

最新文章

  1. 干货|建议初创团队起初也要构建分布式应用
  2. 独家 | 使用机器学习对非结构化数据加速查询-第2部分(具有统计保证的近似选择查询)...
  3. Android 对BaseAdapter做优化处理
  4. dts插件 foobar pan baidu_SU插件插件库安装教程
  5. jaxp的Sax解析
  6. docker运行redis:windows环境运行挂载目录的正确写法、-v挂载data目录、-v挂载redis.conf配置文件以及设置访问密码
  7. python c cmd_在Python cmd模块中处理CTRL-C
  8. python linux调试_python调试
  9. React-Native的TextInput组件的设置以及获取输入框的内容
  10. Windows 10 移动版正式结束支持
  11. tkinter message_【莫烦Python】Tkinter 做简单的窗口视窗lt;学习笔记(2)gt;
  12. typeof的用法 typeof的返回值是一个字符串 返回的字符串类别
  13. usb 驱动之usbip
  14. YOLO v2详细解读
  15. unity mmd不支持android,MMD模型导入Unity的解决方案
  16. Word中的文字如何上下(垂直)居中?
  17. PDF怎么拆分页面,PDF拆分页面的方法
  18. Altium Designer 的技巧补充
  19. 《炬丰科技-半导体工艺》半导体封装中金丝键合技术
  20. 根据指定月份,打印该月份所属的季节3,4,5 春季 6,7,8 夏季 9,10,11 秋季

热门文章

  1. asp mysql 性能_asp优化:最大限度优化你的Asp性能
  2. 【Unity打包崩溃】安卓包遇到CrashReport-Native: Faile to open comm file(/system/build.prop)就闪退
  3. iwrite复制粘贴方法
  4. codewars 7kyu Vowel Count
  5. 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数002·AI人工智能
  6. 最优控制 3:最优控制理论中的极小值原理与动态规划
  7. 【3】Maxwell轴向电机“单边磁拉力”仿真设置
  8. javascript单例、代理、状态设计模式
  9. OpenCV 中的矩(moments)和 Hu不变矩(HuMoments)
  10. 第十一讲 免费空间申请