泛型是.NET Framework 2.0引入的新特性,使得在设计类和方法时,不必确定具体的参数类型(延迟声明), 一个类或方法可以满足不同类型需求。
下面3个方法的分别在控制台打印int、string、DateTime类型的参数值:
void ShowInt(int val) { Console.WriteLine(val); }
void ShowString(string val) { Console.WriteLine(val); }
void ShowDateTime(DateTime val) { Console.WriteLine(val); }
如果还想打印long、char那么又得写两个方法,很明显有点费事。
void Show(object val) { Console.WriteLine(val); }
以object作为参数的类型,不管是打印int还是string,都可以通过这一个方法实现:
Show(1);
Show("1");
Show(DateTime.Now);
这就达到了一个方法满足多种类型需求的作用。
但是,相比之前那三个方法,以object类型作为参数,在调用方法时会产生一个装箱和拆箱的过程,势必会影响性能。
void Show<T>(T val) { Console.WriteLine(val); }
在编写Show方法时,可以使用T作为占位符,先不指定T的具体类型,等到调用的时候再指定具体类型。如:
Show<int>(1);
同样当我们想打印string类型的时候:
Show<string>("1");
同时泛型方法还可以从参数类型来推导具体的类型参数,所以就可以简化调用:
Show(1);
Show("1");
这时候T分别是int和string类型。
这样同样达到了以object作为参数类型时的效果,同时它又不会发生装箱和拆箱的操作,所以性能方面也不会有损失,真正达到了事半功倍的效果。
版权声明:本文由不落阁原创出品,转载请注明出处!
不愧是C# 2.0劳动人名智慧的结晶
2020-07-14 15:42回复