1定义
l 泛型方法是使用类型参数声明的方法。
class Class3
{
void Swap<T>(ref T a, ref T b)
{
T temp = a;
a = b;
b = temp;
}
/*Generate two error
1 找不到类型或命名空间名称“T”(是否缺少 using 指令或程序集引用?)
2 找不到类型或命名空间名称“T”(是否缺少 using 指令或程序集引用?)
void Swap(ref T a,ref T b)
{
T temp = a;
a = b;
b = temp;
}
*/
}
void Swap<T>(ref T a, ref T b)其实就是 void Swap(ref T a, ref T b),但是在非泛型类中写成
void Swap(ref T a, ref T b)编译通不过,必须把参数T 提到方法名后。在泛型类中void Swap(ref T a, ref T b)编译可以通过。
l 调用时可以省略方法后的类型参数
int a = 3, b = 5;
Class3.Swap<int>(ref a, ref b);
string aa="aa",bb="bb";
Class3.Swap<string>(ref aa,ref bb);
//no error ,compiler can khnow call what
Class3.Swap(ref a, ref b);
Class3.Swap(ref aa,ref bb);
2注意:
l 在泛型类中,非泛型方法可以访问类级别类型参数
l 泛型方法中也可以使用类型约束
public static void SwapValueType<T1>(ref T1 a, ref T1 b) where T1 : struct
{
T1 temp = a;
a = b;
b = temp;
}
只针对值类型的数据交换
l 泛型方法可以使用许多类型参数进行重载。
public static void SomeOperate<T>(T a)
{
}
public static void SomeOperate<T, U>(T a, U b)
{
}