什么是泛型?

泛型是具有占位符(类型参数)的类、结构、接口和方法,这些占位符是类、结构、接口和方法所存储或使用的一个或多个类型的占位符。泛型集合类可以将类型形参用作其存储的对象类型的占位符;类型形参呈现为其字段的类型和其方法的参数类型。泛型方法可将其类型形参用作其返回值的类型或用作其形参之一的类型。

不太懂?那么来个通俗易懂的。

泛型在 .NET Framework 2.0 中首次引入,它本质上是一个“代码模板”,可让开发人员定义类型安全数据结构,无需处理实际数据类型。

为方便理解泛型的作用,让我们对比一下非泛型集合类:ArrayList。 在 .NET Framework 1.0 中,ArrayList 元素属于 Object 类型。 这意味着添加的任何元素都会以静默方式转换为 Object。 从列表读取元素时,会发生相同的情况。 此过程称为装箱和拆箱,它会影响性能。 但更重要的是,在编译时无法确定列表中的数据类型。 这就使得某些代码不太可靠。 泛型解决了此问题,它可以定义每个列表实例将要包含的数据类型。 例如,只能将整数添加到 List<int>,只能将人员添加到 List<Person>

泛型还可以在运行时使用。 这意味着,运行时知道你要使用的数据结构类型,并可以更高效地将数据结构存储在内存中。

泛型的优点

  • 泛型列表的执行效率比非泛型列表要高。对于同样存储整数的List<int>和ArrayList而言,List<int>的排序时间明显比ArrayList快。这是因为,泛型列表的类型是不同的 ([System.Int32]),而非泛型列表的类型已通用化(都是object),由于运行时知道泛型 List<int> 的类型是 Int32,因此可以将列表元素存储在内存中的基础整数数组内,而非泛型 ArrayList 必须将每个列表元素强制转换为对象,多余的强制转换会占用时间,降低列表排序的速度。
  • 可以改善调试体验。在 C# 中调试泛型时,可以知道数据结构中每个元素的类型。如果不使用泛型,则无从知道每个元素的类型是什么。

参考资料

https://docs.microsoft.com/zh-cn/dotnet/standard/generics

最新文章

  1. EventDispatcher 事件分发组件
  2. 【转】C#调用Windows图片和传真查看器打开图片
  3. HDU 2082 找单词 --生成函数
  4. MSP430常见问题之工作模式和功耗类
  5. Photon引擎开发实战(1)——Photon 简介
  6. 搭建BCE本地开发环境
  7. TXT四则运算计算器
  8. Android SDK下载安装及配置教程
  9. 用python对比两张图片的不同
  10. 打开ubantu报错(invalid environment block. Press any key to continue)
  11. ML.NET 示例:深度学习之集成TensorFlow
  12. gdb调试线程
  13. 关于ACtion类利用file类型取得上传文件的内容,名字和内容类型
  14. ---perl 模块安装方法
  15. [转]POJ3624 Charm Bracelet(典型01背包问题)
  16. js判断输入的字符是否是汉字
  17. Apache提供的dbUtils
  18. 八、mini2440裸机程序之UART(2)UART0与PC串口通信【转】
  19. Luban 鲁班 图片压缩 MD
  20. mysql load本地文件失败,提示access denied

热门文章

  1. istio部署-helm
  2. vuex中mapGetters的使用及简单实现原理
  3. C#使用Xamarin开发移动应用 ---- 系列文章
  4. 201871010109-胡欢欢《面向对象程序设计(java)》第二周学习总结
  5. for each 语句
  6. Kibana 的 docker 镜像使用
  7. mysql之字段的修改,添加、删除,多表关系(外键),单表详细操作(增删改)
  8. uniform
  9. 第二章python中的一切皆对象
  10. QHBoxLayout 、QFormLayout 遍历子部件,查找QLineEdit控件