一、泛型方法
泛型方法可以在泛型和非泛型类以及结构和接口中声明。
1、声明泛型方法
泛型方法具有类型参数列表和可选的约束。
-
泛型方法有两个参数列表。
- 封闭在圆括号内的方法参数列表。
- 封闭在尖括号内的类型参数列表。
-
要声明泛型方法,需要:
- 在方法名称之后和方法参数列表之前放置类型参数列表;
- 在方法参数列表后放置可选的约束子句。
public void PrintData(S,T)(S p,T t) where S: Person
{
...
}
//<S,T>:类型参数列表
//(Sp,T t):方法参数列表
//where S: Person:约束子句
2、调用泛型方法
void DoStuff<T1,T2>(T1 t1,T2 t2)
{
T1 someVar = t1;
T2 otherVar = t2;
}
DoStuff<short,int>(sVal,iVal);
DoStuff<int,short>(iVal,lVal);
//<short,int>:类型实参
3、推断类型
编译可以从方法参数中推断类型参数,我们可以省略类型参数和调用中的尖括号。
DoStuff(sVal,iVal);
泛型方法的示例
//非泛型类
class Simple
{
//泛型方法
static public void ReverseAndPrint<T>(T[] arr)
{
Array.Reverse(arr);
//使用类型实参 T
foreach (T item in arr)
Console.Write($"{item.ToString() },");
Console.WriteLine("");
}
}
class Program
{
static void Main(string[] args)
{
//创建各种类型的数组
var intArray = new int[] { 3, 5, 7, 9, 11 };
var stringArray = new string[] { "first", "second", "third" };
var doubleArray = new doub