c# 泛型(一)--引入

     我们在编写程序时,经常遇到两个模块的功能非常相似,只是一个是处理int数据,另一个是处理string数据,或者其他自定义的数据类型,但我们没有办法,只能分别写多个方法处理每个数据类型,因为方法的参数类型不同。有没有一种办法,在方法中传入通用的数据类型,这样不就可以合并代码了吗?泛型的出现就是专门解决这个问题的。

    

如果不久以后需要对一个byte类型的数组进行排序,而上面的排序算法只能接受一个int类型的数组,此时上面一段代码要改的地方也就一处

BubbleSort(int[] array)改成BubbleSort(byte[] array)即可,但是我们需要从新写方法,这样代码就有重复的。为了解决这个问题泛型产生。

      我们使用占位符 T来表示任何类型。这样就屏蔽了方法签名的差异

      

现在看起来不错,但是还有一个问题:如何指定T是int,byte,还是char?

当定义一个类,并且这个类需要引用它本身以外的其他类型时,可以定义带参数的构造函数,然后将它需要的类型实例通过构造函数的参数传递进来。但是在上面,参数T本身就是一个类型(类似于int,byte,char,而不是类型的实例,比如1和‘a’)。很明显无法在构造函数中传递T类型的数组,因为参数接受的是类型的实例,而T是类型本身。

   此时需要一种特殊的语法来传递这个T占位符,.net提供了专门的语法来传递T占位符,其中一种就是在定义类型的时候传递。此时,类型也就变成了泛型类。

 public class SortHelper<T>{

    public void BubbleSort(T[] array){

          //方法实现体

     }

}

在类型名称的后面加一个尖括号,使用这个尖括号来传递占位符,也就是类型参数。接下来看一下如何使用泛型。当需要一个int类型的数组排序时。

SortHelper<int> sorter=new SortHelper<int>();

int[] array={8,1,4,7,3};

sorter.BubbleSort(array);

当需要为一个byte类型的数组排序时:

SortHelper<byte> sorter=new SortHelper<byte>();

byte[] array={8,1,4,7,3};

sorter.BubbleSort(array);

可以看出:泛型类就类似于一个模板,可以在需要时为这个模板传入任何需要的类型。更专业一点,为这一节的占位符起一个正式的名称。叫类型参数。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值