C#泛型基础

一、简概
泛型是C#语言和公共语言运行库 (CLR) 中的一个新功能。泛型将类型参数的概念引入.NET Framework,类型参数让这些类和方法可以将一个或多个类型的指定推迟到客户端代码声明并实例化该类或方法。例如,通过使用泛型类型参数 T,您可以编写其他客户端代码能够使用的单个类,而不致引入运行时强制转换或装箱操作的成本或风险。
二、用途
使用泛型类型可以最大限度地重用代码、保护类型的安全以及提高性能。
三、泛型T
泛型类型参数 T在实际使用中很常见,比如List。其实是可以写成List的,但是使用List通常会出现一些问题:
1.比如把一个int数据存入到一个List集合中,int数据则会被自动转成object,当试图取取用这个int数据的时候,还需要把object转换为int。而在这期间有转换操作:int转换为object,object转换为int。这个转换涉及到拆箱和封箱操作,也就是引用类型到值类型或者值类型到引用过程转换的过程,这个过程相对来说需要较多的时间,当数据量过多的时候,对写代码的效率来说,影响会相应增加。
2.另外,如果把一个string类型存入到了List中,系统是不会报错的。但是当需要取用的时候,也许开始没发现不小心存入了一个string类型,然后自主认为它是一个int类型,把它转成了int后,当到了这个时候程序就要报错了。
有以上两个例子,使用List的劣点就显现出来了。为了比较好的解决以上两个问题,c#引入了T这个概念,因为在大部分情况下,数据类型都是已经确定好的了,没必要再去使用object。
每当使用List的时候,首先需要实例化一个List,比如这样的代码:
List list=new List();
代码解读:明确List这个集合只能加string这个数据类型,不允许加其他数据类型。
不难看出T的作用:作为一个通用的容器。当明确T容器装哪个数据类型后,T容器则会存入操作,T容器以后便会检查写入的数据类型是否正确。

四、泛型方法
例子:现在需要写一个方法,这个方法传入的参数可能是int数据类型的,也可能是string数据类型的。
1.一般可以使用重载方法解决这个问题,比如以下两种重载方法:
(1)public void test(int param){
}
(2)public void test(string param){
}
若是使用重载来解决的话,若是传入的参数类型多了之后,则需要写入对应数量的重载方法,效率也会随参数的增加而下降。
2.也可以使用只需要写一种重载方法的解决办法:
public void test(object param) {
}
但使用这种方法来解决的话,又会出现object转成其他类型的过程,同样会带来效率损失。而且object转换时不会检查类型,一旦传入了不支持的类型,极大可能会出问题。
3.最后要介绍的一种较好的方法:泛型方法。
public void test(T param){
}
使用这个方法时,提前写好这个方法要传入的数据类型即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值