只是比较简单的解释,在实际使用中,如果遇到需要深入研究的场景,再翻阅相关资料深入研究下。
一、泛型T
这个T在实际使用中很常见,比如List
同时,如果不小心把一个string类型存入到了这个List
这个时候使用List
当我们使用List
List
这个代码的意思是告诉list这个集合只能放string这个类型的数据,放其他类型的数据,编译器是会报错的。这样我们不难理解,T这个东西的作用,其实就是一个通用的容器,制造它的人开始不指定它是用来装什么的,而使用者在使用它的时候要告诉这个容器准备用来装什么,容器知道了用来装什么之后,后面所有存入操作,它都要检查一下你放的东西是不是开始指定的东西类型。
二、泛型方法
现在有一个需求,需要写一个方法,这个方法传入的参数可能是int型的,也可能是string型的。首先我们可以用方法的重载方案解决这个问题,比如下面两个重载方法:
public void test(int param)
{ }
public void test(string param)
{ }
但是这样的话如果支持的类型变多了,那么你需要写很多重载方法。如果只写一个重载方法,则可以写成
public void test(object param) { }
但是这样写又出现object转成其他类型的问题,会带来效率损失。同时不检查类型,一旦传入了不支持的类型,可能会出问题。
现在把test方法改造一下,这样写:
public void test
这样写之后,使用的时候要求提前通知这个方法,你传入的是什么类型,即:
test
如果写成 test
这就是泛型方法。这里面我们省略了方法内部的实现,其实仔细想一下,如果要在这样的方法里面添加业务代码,似乎除了用于存放数据的集合之外,并没有多少场景需要这么写方法。没错,泛型这个东西最常用的应用场景就是数据集合。而List
三、泛型类
上面的方法:public void test
class TClass
{
public void test(T param)
{ }
}
你会发现,如果把
class List
{
public void Add(T param)
{ }
}
这不就是我们经常用的List
四、有了泛型类的概念,泛型接口就很好理解了,给上面的TClass写一个接口进行规范:
interface ITClass
{
void test(T param);
}
上面讲的TClass继承这个接口就可以了:
class TClass
{
public void test(T param)
{
throw new NotImplementedException();
}
}
————————————————
版权声明:本文为CSDN博主「returnTrue999」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/dap769815768/article/details/81946506