19-泛型类中的泛型方法
16.5.1 泛型类中的泛型方法
上述例子中的泛型方法存在于非泛型类中,泛型方法的泛型参数直接在方法名称后面声明。也可以先定义泛型类,即在类名称的后面加了一个尖括号,使用这个尖括号来传递占位符(也就是类型参数),再在类中定义泛型方法。
前面的BubbleSort泛型方法也可以这样定义。
01 public class SortHelper<T> where T : IComparable //实现Bubble Sort算法的类SortHelper
02 {
03 public void BubbleSort(T[] array) {
04 int length = array.Length;
05 for (int i=0; i<= length -2;i++) {
06 for (int j= length -1; j>=1;j--)
07 if (array[j].CompareTo(array[j - 1]) < 0)
{ //如果前面的元素较大,交换相邻两个元素
08 int temp = array[j];
09 array[j] = array[j - 1];
10 array[j - 1] = temp
11 }
12 }
13 }
14 }
上述代码中,因为泛型类已经声明了泛型参数T,可以直接使用下面的语句。
public void BubbleSort(T[] array)
定义泛型类的泛型方法。要调用泛型类的泛型方法时,需先声明泛型类的对象,接着使用泛型类的对象调用泛型方法,与调用普通方法完全一样。代码如下。
01 class Program //实现Bubble Sort算法的类SortHelper
02 {
03 static void Main (string[] args) {
04 SortHelper sorter<int> = new SortHelper<int> ();
05 int[] array = {8, 2, 4, 6, 10};
06 sorter.BubbleSort (array);
07 foreach(int i in array) { //输出排序结果
08 Console.Write(“{0 }”,i);
09 }
10 Console.WriteLine();
11 Console.ReadKey();
12 }
13 }
调用Bubble Sort算法把整型数组array的元素排序,并输出。其中语句:
SortHelper sorter<int> = new SortHelper<int> ();
声明泛型类SortHelper的对象sorter,下面的语句:
sorter.BubbleSort (array);
调用泛型方法BubbleSort。