一、泛型方法的格式
声明:
public void Swap<T>(ref T x,ref T y) //函数名后要跟表示类型用占位符T代替
{
//函数体
}
使用:
int x=10,y=20;
Swap(ref x,ref y); //自动识别,然后用实际类型替换T
示例:
class Program
{
public static void Swap<T>(ref T x, ref T y)
{
T temp = x;
x = y;
y = temp;
}
static void Main(string[] args)
{
int x = 10, y = 55;
Console.WriteLine("{0},{1}",x,y); //输出10,55
Swap(ref x,ref y);//完整的为Swap<int>(ref x,ref y);<int>可以省
Console.WriteLine("{0},{1}",x,y); //输出55,10
string q = "张三",p = "李四";
Console.WriteLine(q+p); //输出张三李四
Swap(ref q, ref p);
Console.WriteLine(q+p); //输出李四张三
Console.ReadKey();
}
}
二、泛型的使用范围
只有类型和方法可以引入类型参数T,属性、索引器、时间、字段、构造函数、操作符等都不可以声明类型参数。但是他们可以使用他们所在的泛型类型中的类型参数。
例如:
public Stack<T>(){}; //错误,不能用在构造函数上
public T Pop() //正确,可以使用他们所在泛型类中的类型参数T
{ //方法体};
可以使用的范围有class、struct、interface、delegate。
如:
public struct Nullable<T> //正确,可以用在struct上
{
public T value{get;} //正确,可以使用所示类型的类型参数T
}
三、多个参数的泛型方法使用
泛型类型或方法中可以存在多种泛型参数。如下:`
class Program
{
public static void Fuc<Tname,Tscore>(Tname i,Tscore j)
{
Console.WriteLine("{0}的分数为{1}",i,j);
}
static void Main(string[] args)
{
string Nam = "王二";
int Sco = 100;
//Fuc(Sco,Nam); //可以省略<string,int>,编译器会按照参数顺序推测,但是这种不健壮
Fuc<string, int>(Nam,Sco);//建议加上<类型说明>,提高代码健壮性,Nam与Sco不能颠倒否则会报错
Console.ReadKey();
}
}