C#高级编程(如何理解和使用泛型())

泛型
是允许用户使用占位符定义类和方法的类。泛型已添加到C#语言的2.0版中。使用Generic的基本思想是允许类型(整数, 字符串, …等和用户定义的类型)成为方法, 类和接口的参数。集合的主要限制是缺乏有效的类型检查。这意味着你可以将任何对象放入集合中, 因为C#编程语言中的所有类都从对象基类扩展而来。这损害了类型安全性, 并且与C#作为类型安全语言的基本定义相矛盾。此外, 使用集合会涉及显着的性能开销, 这些形式的隐式和显式类型转换需要从集合中添加或检索对象。
【C#高级编程(如何理解和使用泛型())】为了解决类型安全问题,
。净
框架提供了泛型来创建类, 结构, 接口和方法, 这些类, 结构, 接口和方法为其使用的类型使用占位符。泛型通常用于为引用和值类型创建类型安全的集合。的
。净
框架在System.Collections.Generic命名空间中提供了一组广泛的接口和类, 用于实现通用集合。
通用类
C#中的泛型是它最强大的功能。它允许你定义类型安全的数据结构。结果是显着的性能提升和高级代码, 因为它有助于重用数据处理算法而无需复制特定于类型的代码。泛型与C ++中的模板相似, 但实现和功能不同。泛型引入了类型参数的概念, 因此可以创建推迟数据类型框架的方法和类, 直到该类或方法被声明并由客户端代码实例化为止。泛型类型比普通系统类型具有更好的性能, 因为它们减少了装箱, 拆箱和类型转换变量或对象的需求。
在通用类创建中指定参数类型。
要创建通用类的对象, 请使用以下语法:

BaseType obj = new BaseType ()

例子:
// C# program to show working of // user defined Generic classes using System; // We use < > to specify Parameter type public class GFG< T> {// private data members private T data; // using properties public T value {// using accessors get { return this .data; } set { this .data = https://www.lsbin.com/value; } } }// Driver class class Test {// Main method static void Main( string [] args) {// instance of string type GFG< string > name = new GFG< string > (); name.value ="lsbin" ; // instance of float type GFG< float > version = new GFG< float > (); version.value = https://www.lsbin.com/5.0F; // display lsbin Console.WriteLine(name.value); // display 5 Console.WriteLine(version.value); } }

输出:
lsbin5

说明:前面的示例定义了一个通用类, 玻璃纤维, 它使用通用类型参数" T"。在Main()方法中, 通过将" T"替换为" string"和" float"数据类型创建了GFG的两个实例。这些对象分别用于存储"字符串"和"浮动"值。 GFG类通过在其构造函数中接受所需的类型来确保类型安全。
具有各种参数的通用方法:正如方法可以采用一个参数一样, 泛型也可以采用各种参数。可以将一个参数作为熟悉的类型传递, 将另一个作为泛型类型传递, 如下所示:
例子:
// C# program to show multiple // type parameters in Generics using System; public class GFG {// Generics method public void Display< TypeOfValue> ( string msg, TypeOfValue value) { Console.WriteLine( "{0}:{1}" , msg, value); } }// Driver class public class Example {// Main Method public static int Main() {// creating object of class GFG GFG p = new GFG(); // calling Generics method p.Display< int > ( "Integer" , 122); p.Display< char > ( "Character" , 'H' ); p.Display< double > ( "Decimal" , 255.67); return 0; } }

输出:
Integer:122Character:HDecimal:255.67

泛型的特征
泛型是一种通过多种方式改进程序的技术, 例如:
  • 它可以帮助你进行代码重用, 性能和类型安全。
  • 你可以创建自己的通用类, 方法, 接口和委托。
  • 你可以创建通用集合类。 .NET框架类库在System.Collections.Generic命名空间中包含许多新的通用集合类。
  • 你可以在运行时获取有关通用数据类型中使用的类型的信息。
泛型的优势
  • 可重用性:你可以在同一代码中将单个通用类型定义用于多个目的, 而无需进行任何更改。例如, 你可以创建一个通用方法来添加两个数字。此方法可用于添加两个整数以及两个浮点数, 而无需在代码中进行任何修改。
  • 类型安全:通用数据类型提供了更好的类型安全性, 尤其是在集合的情况下。使用泛型时, 你需要定义要传递给集合的对象的类型。这有助于编译器确保仅将定义中定义的那些对象类型传递给集合。
  • 性能:与普通系统类型相比, 泛型类型提供了更好的性能, 因为它们减少了对变量或对象进行装箱, 拆箱和类型转换的需要。

    推荐阅读