很感谢组织给我一次讲课的机会。本次讲的是泛型,看过一遍.NEt之美,回过头来再看的时候,发现很多以前没看懂得东西,现在再次的翻开书看的时候,发现我能理解很多,同时也能根据自己动手敲代码发现新的问题。
Why
先看一段排序的代码:
//冒泡排序 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; } } } } 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(); } }这是一段对Int型数组进行排序。如果我要对char类型和byte类型进行排序又是如何?
难道我们要这样做吗?
这时候我们就想到了——泛型。
What
泛型是程序设计语言的一种特性。将类型参数化以达到代码复用提高软件开发工作的效率的一种数据类型。其实他也是一种数据类型。使用泛型,能提高代码复用率,使得代码更加灵活。
How
修改我们之前的Demo
public class Book : IComparable { private String name; private int price; public String Name { get{ return this.name;} } public Int32 Price { get { return this.price; } } public Book(string name, int price) { this.name = name; this.price = price; } //s实现接口,要告诉它返回什么类型的,根据什么进行比较 public int intCompareTo(object obj) { Book book = (Book)obj; return this.price.CompareTo(book.price); } } //泛型约束 public interface IComparable { int intCompareTo(Object obj); } public class SortHelper<T> where T : IComparable { public void BubbleSort(T[] array) { int length = array.Length; for (int i = 0; i <= length - 2; i++) { for (int j = length - 1; j >= 1; j--) { // 对两个元素进行交换 if (array[j].intCompareTo(array[j - 1]) < 0) { T temp = array[j]; array[j] = array[j - 1]; array[j - 1] = temp; } } } } } class Program { static void Main(string[] args) { Book[] BookArry = new Book[2]; Book book1 = new Book(".Net之美", 123); Book book2 = new Book("Java讲义", 45); BookArry[0] = book1; BookArry[1] = book2; SortHelper<Book> sorter = new SortHelper<Book>(); sorter.BubbleSort(BookArry); foreach (Book h in BookArry) { Console.WriteLine("name:{0}", h.Name); Console.WriteLine("price{0}\n", h.Price); } } }
总结:
为什么用泛型,有一句话:fool me once,shame on you;fool me towice,shame on me.愚弄我一次,是你的不对,愚弄我两次,是我的过失。泛型提高代码的复用率,给我们节省了很多时间,同时使用泛型也会是电脑运行速度变快,这个如果大家做过.Net之美上边的例子就会懂得。同时泛型也会和反射结合起来,这也是常见的一种写法,不管是和谁结合,但是他们最终的目的都是一样的,提高代码的复用率。