📅  最后修改于: 2023-12-03 15:14:32.927000             🧑  作者: Mango
C#泛型是一种强大的编程概念,允许程序员编写可以适用于不同数据类型的代码。泛型可用于创建类型安全的方法、类、结构和接口,并可提高代码的重用性和可读性。
泛型方法允许您定义一个可以适用于多种数据类型的方法。在方法声明中使用尖括号定义泛型类型,如下所示:
public void PrintArray<T>(T[] arr)
{
foreach (var item in arr)
{
Console.WriteLine(item);
}
}
在上面的示例中,我们定义了一个泛型方法PrintArray
。T
是一个占位符,表示方法的参数类型。在方法调用中,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和并行编程等领域。