📜  C#泛型(1)

📅  最后修改于: 2023-12-03 15:14:32.927000             🧑  作者: Mango

C#泛型

C#泛型是一种强大的编程概念,允许程序员编写可以适用于不同数据类型的代码。泛型可用于创建类型安全的方法、类、结构和接口,并可提高代码的重用性和可读性。

泛型方法

泛型方法允许您定义一个可以适用于多种数据类型的方法。在方法声明中使用尖括号定义泛型类型,如下所示:

public void PrintArray<T>(T[] arr)
{
   foreach (var item in arr)
   {
      Console.WriteLine(item);
   }
}

在上面的示例中,我们定义了一个泛型方法PrintArrayT 是一个占位符,表示方法的参数类型。在方法调用中,C#编译器根据实际参数类型为泛型类型参数T实例化方法。

泛型类

泛型类允许您定义一个可以适用于多种数据类型的类。在类声明中使用尖括号定义泛型类型参数,如下所示:

public class MyStack<T> 
{ 
   private T[] stack = new T[10]; 
   private int top = 0; 

   public void Push(T item) 
   { 
      stack[top++] = item; 
   } 

   public T Pop() 
   { 
      return stack[--top]; 
   } 
}

在上面的示例中,我们定义了一个泛型数据类型MyStack<T>,其中T表示数据类型占位符。在使用MyStack时,可以指定实际用于存储元素的数据类型。

泛型约束

泛型约束允许您在泛型类型参数上设置限制,以便在泛型类型上执行操作之前验证参数的类型和功能。例如,您可能希望在泛型方法上限制参数必须实现一个特定的接口,如下所示:

public void Print<T>(T obj) where T : IPrintable

在上面的示例中,我们使用where 关键字在泛型方法参数后面放置一个约束,该约束指示类型参数T必须实现IPrintable 接口。

关闭构造类型

通过指定类型实参,一个开放式的泛型类型可以转化为一个关闭构造类型。例如,对于上面的 MyStack<T> 类型,它可通过以下方式实例化:

MyStack<int> intStack = new MyStack<int>();
intStack.push(1);
intStack.push(2);
intStack.push(3);

其中,MyStack<int>是一个关闭构造类型, 它代表MyStack<T>T已被实例化为int

总结

泛型是C#中一个十分强大的功能,允许开发人员编写可以自动适应不同数据类型的代码。通过使用泛型,您可以提高代码的重用性和可读性。在C#中,泛型被广泛应用于集合类库、Linq和并行编程等领域。