C#学习记录——泛型理解

1)基本概念

    我们在编写程序时,经常会遇到功能非常相似的模块,只是它们处理的数据类型不一样。那么问题来了,有没有一种办法,用同一个方法来处理传入不同类型参数的办法呢?

泛型的出现就是专门来解决这个问题的。

泛型(Generic)是一种规范,允许你编写类或方法时延迟给出数据类型,直到实际定义类和方法时再给出数据类型。

也就是说,定义一个泛型类时,类名的后面先用<>临时给出数据类型,然后实际使用类定义对象时,再用实际的类型去替换泛型列表(也就是<>)里的当时临时给出的类型名字;定义泛型方法与定义泛型类相似,调用的时候也是再用具体的类型进行替换。

举例如下:

static void Swap<T>(T left, T right){
    T temp;
    temp = left;
    left= right;
    right= temp;
}

// 调用swap
Swap<int>(int a, int b);
Swap<char>(char c, char d);

2)使用举例

泛型定义格式:

//定义泛型类,跟定义普通类一样,只是泛型列表临时给出类型名字
public class 泛型类名<泛型列表> {
    //此处是泛型类的构造方法
    public 泛型类名(数据类型  参数名) {
        构造方法体……;
    }

    //定义T类型方法
    public T functionA(数据类型  参数名) {
        方法体……;
    }

    //此处是普通方法
    public 数据类型 functionB(数据类型  参数名) {
        方法体……;
    }
}

//泛型列表给出的临时类型名字规范是大写,且不能是int、char这些关键字,需要自己取名字


使用格式:

泛型类名<数据类型> 泛型对象名 = new 泛型类名<数据类型>(实参)

//Example
//泛型类内部忽略

Test<int> testObj = new Test<int>(8);

//调用泛型类内部方法
testObj.functionA(cc);
testObj.functionB(cc);

应用举例:

class Test<T> {

    private T[] testArray;

    public Test(int size) {
        testArray = new T[size];
    }

    public T functionA(int a) {
        return testArray[a];
    }

    public void functionB(int b, T formal_parameter) {
        testArray[b] = formal_parameter;
    }
}


class Program {
    static void Main(string[] args) {
        Test<int> intArray = new Test<int>(8);
        intArray.functionB(0, 112);
        Console.WriteLine(intArray.functionA(0));
        Console.ReadKey();
    }

 }

说明:这里定义泛型类Test对象intArray时,int型替换了泛型列表里的T类型。

灵活运用泛型,可以优化代码,减少代码量,提高效率。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jimson_zhu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值