一、简概
泛型是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条)