标签:style blog 使用 io strong 数据 for ar
泛型是 2.0 版 C# 语言和公共语言运行库 (CLR) 中的一个新功能。泛型将类型参数的概念引入 .NET Framework,类型参数使得设计如下类和方法成为可能:这些类和方法将一个或多个类型的指定推迟到客户端代码声明并实例化该类或方法的时候。例如,通过使用泛型类型参数 T,您可以编写其他客户端代码能够使用的单个类,而不致引入运行时强制转换或装箱操作的成本或风险。
——MSDN
我的计算机是以Visual Basic 6.0拉开帷幕的,让我印象比较深的是两个排序:选择排序和冒泡排序。当然本文不是来讨论这两个排序的具体实现,更不讨论区别。那要干吗呢?请往下看。
对于选择排序,完成从小到大的排序,我们要怎么实现功能呢?对于当时的我,肯定毫不犹豫的写出下面的代码,因为课本中就是这样的实现思路:
public class SelectionSort { public void Sort(int[] array) { int length = array.Length; for (int i = 0; i < length - 1; i++) { for (int j = i + 1; j < length; j++) { // 对两个元素进行交换 if (array[i] > array[j]) { int temp = array[i]; array[i] = array[j]; array[j] = temp; } } } } }我们来测试一下:
static void Main(string[] args) { SelectionSort sorter = new SelectionSort(); int[] array = { 5, 2, 0, 1, 3, 1, 4 }; sorter.Sort(array); foreach (int i in array) Console.Write(i + " "); Console.WriteLine(); Console.Read(); }输出结果:0 1 1 2 3 4 5
public class SelectionSort { public void Sort(byte[] array) { int length = array.Length; for (int i = 0; i < length - 1; i++) { for (int j = i + 1; j < length; j++) { // 对两个元素进行交换 if (array[i] > array[j]) { byte temp = array[i]; array[i] = array[j]; array[j] = temp; } } } } }不能高兴的太早,现在又有新需求了,需要对一个char类型的数据进行排序,当然我们可以继续按照上面的思路,采用复制粘贴,然后改一下数据类型。这里就不写代码了!
public class SelectionSort { public void Sort(T[] array) { int length = array.Length; for (int i = 0; i < length - 1; i++) { for (int j = i + 1; j < length; j++) { // 对两个元素进行交换 if (array[i] < array[j]) { T temp = array[i]; array[i] = array[j]; array[j] = temp; } } } } }啊,这效果看起来怎一个“爽”字了得。当然上面的代码是错误的,C#会报错的。到现在,也用不着卖乖了,C#已经帮我们实现了这种效果,那就是泛型。在.Net中,实现比较的基本方法是实现IComparable接口:
public class SelectionSort { public void Sort<T>(T[] array) where T : IComparable { int length = array.Length; for (int i = 0; i < length - 1; i++) { T min = array[i]; int minIndex = i; for (int j = i + 1; j < length; j++) { if (min.CompareTo(array[j]) > 0) { min = array[j]; minIndex = j; } } if (minIndex != i) { array[minIndex] = array[i]; array[i] = min; } } } }
面向对象设计——“泛型”的起步,布布扣,bubuko.com
标签:style blog 使用 io strong 数据 for ar
原文地址:http://blog.csdn.net/zhanglianhai555/article/details/38644671