VLR via C# 泛型
面向对象的开发人员都深谙这种编程方式的好处。其中一个好处就是“代码重用”,它极大提高了开发效率。
泛型(generic)是CLR和编程语言提供的一种特殊机制,它支持另一种形式的代码重用,即“算法重用”。
简单说,开发人员先定义好算法,比如排序、搜索、交换、比较或者转换等。但是,定义算法的开发人员并不设定该算法要操作什么数据类型;该算法可广泛地应用于不同类型的对象。然后,另一个开发人员只要指定了算法要操作的具体数据类型,就可以开始使用这个算法了。
大多数算法都封装在一个类型中,CLR允许创建泛型引用类型和泛型值类型。但不允许创建泛型枚举类型。此外,CLR还允许创建泛型接口和泛型委托。方法偶尔也封装有用的算法,所以CLR允许在引用类型、值类型或接口中定义泛型方法。
//--
比如 List<T>等
//--
泛型为开发人员提供了以下优势:
1.源代码保护
使用泛型算法的开发人员不需要访问算法的源代码。
2.类型安全
将泛型算法应用于一个具体的类型时,编译器和CLR能理解开发人员的意图,并保证只有与指定数据类型兼容的对象才能用于算法。试图使用不兼容类型的对象会造成编译时错误,或在运行时抛出异常。
3.更清晰的代码
由于编译器强制类型安全性,所以减少了源代码中必须进行的强制类型转换次数,使代码更容易编写和维护。
4.更佳的性能
没有泛型的时候,要想定义常规化的算法,它的所有成员都要定义成操作object数据类型。要用这个算法来操作值类型的实例,CLR必须在调用算法的成员之前对值类型实例进行装箱。装箱造成在托管堆上进行内存分配,造成更频繁的垃圾回收,从而损害应用程序的性能。由于现在能创建一个泛型算法来操作一种具体的值类型,所以值类型的实例能以传值方式传递,CLR不在需要执行任何装箱操作。此外,由于不再需要进行强制类型转换,所以CLR无需验证这种转型是否类型安全,这同样提高了代码的运行速度。
VLR via C# 泛型相关推荐
- 【C#】集合_哈希表_字典_泛型_文件
数组能做到:存放同种类型数据,且数据个数确定 object类型的数组能满足:放各种类型的数据,确定放多少个,但是随意插入元素,数组做不到 集合能做到:存放各种数据类型,且不确定存放多少个,能做到随意插 ...
- 2021年大数据常用语言Scala(三十六):scala高级用法 泛型
目录 泛型 定义一个泛型方法 定义一个泛型类 上下界 协变.逆变.非变 非变 协变 逆变 泛型 scala和Java一样,类和特质.方法都可以支持泛型.我们在学习集合的时候,一般都会涉及到泛型. sc ...
- 对比两个同类型的泛型集合并返回差异泛型集合 ——两个List类名的比较
1: /// <summary> 2: /// 对比两个同类型的泛型集合并返回差异泛型集合 3: /// </summary> 4: /// <typeparam nam ...
- 利用委托和泛型实现树的常用操作
在日常开发中,经常遇到对树的操作,我们可以利用泛型和委托对这些树进行操作,这样就不需要每有一个树就要实现相应的功能了. 源码在http://files.cnblogs.com/haiconc/Lang ...
- java 泛型 父子,Java泛型-mb601cf8a78cc07的博客-51CTO博客
Java泛型 泛型类 即把不确定的数据元素类型用一个泛型占位符表示@Data public class Person { private T name; private T address; }Per ...
- java 泛型 .net_Java基础11:Java泛型详解
本文对java的泛型的概念和使用做了详尽的介绍. 本文参考https://blog.csdn.net/s10461/article/details/53941091 具体代码在我的GitHub中可以找 ...
- java 获取泛型的type,如何获取泛型的Type类型
开发中很多时候都遇到或使用到泛型.例如在json转换成bean对象或其他对象,而对象中存在泛型,这时候需要用到TypeToken. Type:是java里的 java.lang.reflect.Typ ...
- Java中创建泛型数组
Java中创建泛型数组 使用泛型时,我想很多人肯定尝试过如下的代码,去创建一个泛型数组 T[] array = new T[]; 当我们写出这样的代码时编译器会报Cannot create a gen ...
- 第八章 泛型程序设计
1.带有[超类型限定 super]的通配符可以向泛型对象写入,带有[子类型限定 extends]的通配符可以从泛型对象读取,反之则不然. 转载于:https://www.cnblogs.com/bao ...
最新文章
- 干货|建议初创团队起初也要构建分布式应用
- 独家 | 使用机器学习对非结构化数据加速查询-第2部分(具有统计保证的近似选择查询)...
- Android 对BaseAdapter做优化处理
- dts插件 foobar pan baidu_SU插件插件库安装教程
- jaxp的Sax解析
- docker运行redis:windows环境运行挂载目录的正确写法、-v挂载data目录、-v挂载redis.conf配置文件以及设置访问密码
- python c cmd_在Python cmd模块中处理CTRL-C
- python linux调试_python调试
- React-Native的TextInput组件的设置以及获取输入框的内容
- Windows 10 移动版正式结束支持
- tkinter message_【莫烦Python】Tkinter 做简单的窗口视窗lt;学习笔记(2)gt;
- typeof的用法 typeof的返回值是一个字符串 返回的字符串类别
- usb 驱动之usbip
- YOLO v2详细解读
- unity mmd不支持android,MMD模型导入Unity的解决方案
- Word中的文字如何上下(垂直)居中?
- PDF怎么拆分页面,PDF拆分页面的方法
- Altium Designer 的技巧补充
- 《炬丰科技-半导体工艺》半导体封装中金丝键合技术
- 根据指定月份,打印该月份所属的季节3,4,5 春季 6,7,8 夏季 9,10,11 秋季
热门文章
- asp mysql 性能_asp优化:最大限度优化你的Asp性能
- 【Unity打包崩溃】安卓包遇到CrashReport-Native: Faile to open comm file(/system/build.prop)就闪退
- iwrite复制粘贴方法
- codewars 7kyu Vowel Count
- 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数002·AI人工智能
- 最优控制 3:最优控制理论中的极小值原理与动态规划
- 【3】Maxwell轴向电机“单边磁拉力”仿真设置
- javascript单例、代理、状态设计模式
- OpenCV 中的矩(moments)和 Hu不变矩(HuMoments)
- 第十一讲 免费空间申请