.NET中的泛型概述

什么是泛型?

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

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

泛型在 .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

原文地址:https://www.cnblogs.com/bossing/p/11359186.html