C#泛型方法

一、泛型方法的格式

声明:
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();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值