.NET1.1版本最受诟病的一个缺陷就是没有提供对泛型的支持。在机房重构的过程中,我们也都使用了泛型,那时是初次接触,至于详细的真的是不理解?那么泛型是什么,我们先从理解泛型开始。
我们先思考这么一个问题:如果由你来实现一个冒泡排序,如果没有泛型,你会这么写:
<span style="font-family:KaiTi_GB2312;font-size:18px;"> public class SortHelper { public void BubbleSort( int[] array) { int length = array.Length; for (int i = 0; i <= length - 2; i++) { for (int j = length - 1; j >= 1; j--) { // 对两个元素进行交换 if (array[j] < array[j - 1]) { int temp = array[j]; array[j] = array[j - 1]; array[j - 1] = temp; } } } } </span>
上面的方法体就是一个冒泡排序,咱们重要看的是所传参数类型,接下来
<span style="font-family:KaiTi_GB2312;font-size:18px;">class Program { static void Main(string[] args) { SortHelper sorter = new SortHelper(); int[] array = { 8, 1, 4, 7, 3 }; sorter.BubbleSort(array); foreach (int i in array) { Console.Write("{0} ", i); } Console.WriteLine(); Console.ReadKey(); } } </span>
这个程序就可以运行了,结果是一个从小到大的排序。我们发现他运行良好,欣喜地认为这便是解决方案了。但是后来,又需要对一个byte类型的数组进行排序,由于c#是一个强类型的语言,所以最快的办法就是把代码复制一下。那么问题就出来了,如果我再对其他数据类型进行排序呢,总不能一个接着一个复制吧。
这时候,我们就要去想解决方案,我们可以将所传参数看作为一个占位符,由于是一个占位符,因此可以代表任何的类型。我们会发现定义占位符的最好方式就是将int[]、byte[]、char[]用占位符替代掉。占位符用T[]来表示,所以T可以代表任何类型。
而我们需要使用一种特殊的语法来传递这个T占位符,.NET提供了专门的语法来传递占位符,其中一种就是在定义类型的时候传递,此时类型也就变成了泛型类。
<span style="font-family:KaiTi_GB2312;font-size:18px;">public class SortHelper<T>{ public void BubbleSort(T[] array){ //方法实现体 } }</span>
当需要为一个int类型的数组排序时:
<span style="font-family:KaiTi_GB2312;font-size:18px;">SortHelper<int> sorter=new SorterHelper<int>(); int[] array ={8.1.4.7.3}; sorter.BubbleSort(array); </span>
可以看到,通过使用泛型,极大地减少了重复代码,使程序更加清爽,泛型类就类似于一个模板,可以在需要时为这个模板传入任何需要的类型。同样,我们平常所见到的泛型是和其他知识混合一起出现的,像泛型集合,反射泛型,委托泛型。我们要做的是逐个破解。
时间: 2024-11-01 20:58:48