C# 泛型
C#泛型
泛型类型定义包含占位符类型的模板。
泛型可以提高类型安全性,减少铸件和拳击。
泛型类型声明可以由泛型类型的消费者填充的类型参数。
这里是一个泛型类型Stack <T>,用于堆栈类型T的实例。
Stack<T>声明单个类型参数T:
public class Stack<T> {
int position;
T[] data = new T[100];
public void Push (T obj) {
data[position++] = obj;
}
public T Pop() {
return data[--position];
}
}
我们可以使用Stack <T>如下:
Stack<int> stack = new Stack<int>(); stack.Push(5); stack.Push(10); int x = stack.Pop(); // x is 10 int y = stack.Pop(); // y is 5
Stack< int> 用类型参数int填充类型参数T.
Stack<> 是一个开放类型,而Stack <int>是一个闭合类型。
泛型方法
泛型方法在方法的签名中声明类型参数。
使用泛型方法,许多基本算法只能以通用方式实现。
这里是一个泛型的方法交换任何类型T的两个变量的内容:
static void Swap<T> (ref T a, ref T b) {
T temp = a;
a = b;
b = temp;
}
Swap<T>可以使用如下:
int x = 5; int y = 10; Swap (ref x, ref y);
没有必要为通用方法提供类型参数。
如果存在歧义,可以使用类型参数调用泛型方法,如下所示:
Swap<int> (ref x, ref y);
只有方法和类型可以引入类型参数。
属性,索引器,事件,字段,构造函数,运算符等不能声明类型参数。
以下代码显示了如何编写返回通用项的索引器:
public T this [int index] {
get {
return data [index];
}
}
构造函数可以接受现有的类型参数,但不能引入它们。