泛型方法是使用类型参数声明的方法,如下所示:
static void Swap<T>(ref T lhs, ref T rhs) { T temp; temp = lhs; lhs = rhs; rhs = temp; }
下面的代码示例演示一种使用 int 作为类型参数的方法调用方式:
public static void TestSwap() { int a = 1; int b = 2; Swap<int>(ref a, ref b); System.Console.WriteLine(a + " " + b); }
Swap 的调用等效于前面的调用:
Swap(ref a, ref b);
在重载解析步骤中,编译器仅包括类型推理取得成功的那些泛型方法。
在泛型类中,非泛型方法可以访问类级别类型参数,如下所示:
class SampleClass<T> { void Swap(ref T lhs, ref T rhs) { } }
GenericList2<T> 中所示。
class GenericList<T> { // CS0693 void SampleMethod<T>() { } } class GenericList2<T> { //No warning void SampleMethod<U>() { } }
IComparable<T> 的类型参数一起使用。
void SwapIfGreater<T>(ref T lhs, ref T rhs) where T : System.IComparable<T> { T temp; if (lhs.CompareTo(rhs) > 0) { temp = lhs; lhs = rhs; rhs = temp; } }
例如,下列方法可以全部位于同一个类中:
void DoWork() { } void DoWork<T>() { } void DoWork<T, U>() { }