17.10 泛型方法
泛型方法是使用类型参数声明的方法,在这一点上和其他泛型类型一样,也可以对类型参数应用约束。只不过,和之前的泛型类型不同的是,方法是成员,而不是类型。泛型方法有它的使用场景,它可以声明在如下类型中:
❑泛型类以及非泛型类
❑结构
❑接口
要声明一个泛型方法,只需要在普通方法的基础上增加类型参数列表,将方法参数列表中的类型修改为类型参数即可,如图17-13所示。
图 17-13 泛型方法的声明
在学习了如何声明泛型方法后,继续学习如何调用泛型方法,与泛型类型的使用方法很相似。例如,先定义一个泛型方法,如下所示:
public class MyPrinter
{
//泛型方法
public static TResult Print<T,TResult>(T msg)
where TResult:new()//约束
{
TResult result=new TResult();
return result;
}
}
然后调用这个静态的泛型方法:
对于泛型方法,Visual Studio 2010的IntelliSense功能也可以进行提示,如图17-14所示。
图 17-14 Visual Studio的代码提示功能对泛型方法的支持
在一些情况下,编译器可以根据传入的方法参数判断出类型参数的具体类型,此时就可以省略掉尖括号中的类型实参,如图17-15所示:
图 17-15 泛型方法中基于编译器的类型推断
接下来,我们来看一个完整的例子,如代码清单17-12所示。
代码清单17-12 泛型方法的完整示例
namespace ProgrammingCSharp4
{
class Data
{
public Data()
{
System.Console.WriteLine(“Data类构造函数.”);
}
}
class GenericsSample
{
public static void Main()
{
MyPrinter.Print<int,Data>(2010);
MyPrinter.Print<string,Data>("hello world!");
}
}
public class MyPrinter
{
public static TResult Print<T,TResult>(T msg)
where TResult:new()
{
TResult result=new TResult();
return result;
}
}
}
上述代码的运行结果如下:
Data类构造函数.
Data类构造函数.