浅谈泛型
来源:互联网 发布:linux批量解压zip 编辑:程序博客网 时间:2024/06/07 20:18
很感谢组织给我一次讲课的机会。本次讲的是泛型,看过一遍.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类型进行排序又是如何?
难道我们要这样做吗?
我们会发现,这样做的虽然第一次复制,效率要高一些,但是第二次,呢,但是这样做,确实加重了服务器的负担。如果这个功能以后不再扩展了,那么我们就没必要花费大把的时间去做一个很Perfect的方案,但是这个功能以后还是要用的,所以我们要完善一下下。
这时候我们就想到了——泛型。
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); } } }
这样修改了我们的代码。为什么在最开始的时候我就说一定要动手操作,只有动手了才能知道这个泛型约束的作用。因为我们不确定T是什么类型的,我们要给他一个约束,这就是类型约束,在比较的时候,比如说是两本书进行比较,我们也不知道是比较名称还是比较价钱,这也用到了约束。根据以上代码,可以大概了解一下泛型约束。
总结:
为什么用泛型,有一句话:fool me once,shame on you;fool me towice,shame on me.愚弄我一次,是你的不对,愚弄我两次,是我的过失。泛型提高代码的复用率,给我们节省了很多时间,同时使用泛型也会是电脑运行速度变快,这个如果大家做过.Net之美上边的例子就会懂得。同时泛型也会和反射结合起来,这也是常见的一种写法,不管是和谁结合,但是他们最终的目的都是一样的,提高代码的复用率。
0 0
- 浅谈泛型编程
- 浅谈泛型
- JAVA泛型浅谈
- 浅谈泛型
- 浅谈泛型
- Java--泛型浅谈
- JAVA泛型浅谈
- 浅谈Java泛型编程
- 浅谈C#中的泛型
- 浅谈java的泛型
- 浅谈泛型(一)
- 浅谈泛型(二)
- 浅谈Java泛型编程
- 浅谈 Swift 中的泛型
- 浅谈Java中的泛型
- JAVA 泛型浅谈(1)
- 浅谈C#泛型的用处
- 浅谈C#泛型的用处
- 关于O(logN)的正确理解
- 修改UCenter 版本1.6用户名长度限制的方法
- MFC静态调用dll
- Android学习笔记2
- 3130 CYD刷题
- 浅谈泛型
- iOS8设置别名后报错,提示没有定义的解决办法
- 错误定位
- 你的博客,写给谁人看——对写博客和写总结的反思
- iOS最佳实践
- Excel2003绘制标准曲线
- oracle 表分区
- [YFHomeViewController tableView:numberOfRowsInSection:]: unrecognized selector sent to instance 0x79
- 【万里征程——Windows App开发】控件大集合2