标签:泛型
接着深入理解C#中的泛型(一),这篇文章主要讲解泛型类、泛型方法、泛型与集合。
public class SortHelper<T> where T : IComparable
public class SortHelper { //参数为T的冒泡排序 public void BubbleSort<T>(T[] array) where T : IComparable { int length = array.Length; for (int i = 0; i <= length - 2; i++) { for (int j = length - 1; j >= 1; j--) { //对两个元素进行交换 if (array[j].CompareTo(array[j - 1]) < 0) { T temp = array[j]; array[j] = array[j - 1]; array[j - 1] = temp; } } } } }
尽管BubbleSort()是一个泛型方法,但在使用上与普通方法没有任何区别。
ArrayList list = new ArrayList(); const int ListSize = 3; for (int i = 0; i < ListSize; i++) { list.Add(i); } for (int i = 0; i < ListSize; i++) { int value = (int)list[i]; Console.WriteLine(value); }上述代码是“可以运行的代码”,而非“好的”代码。因为ArrayList类型为了包含任何类型,所有它接受的参数为所有类型的基类Object,Object是一个引用类型,而int是一个值类型,因此当调用list.Add(i)时,存在一个装箱的操作。同理,当从ArrayList中获取元素时,又需要进行一个拆箱的操作:int value=(int)list[i]。这两个操作是相对耗时的,尤其是当集合类型包含的元素比较多或值类型比较大的时候。
List<int> list = new List<int>(); const int ListSize = 3; for (int i = 0; i < ListSize; i++) { list.Add(i); } for (int i = 0; i < ListSize; i++) { int value = (int)list[i]; Console.WriteLine(value); }
ArrayList list = new ArrayList(); int i = 100; list.Add(i); string value = (string)list[0];大家一看就能发现这段代码有问题,因为类型不匹配。可惜的是,编译器无法知道,因为对它来说,不管是int还是string,它们都是Object类型。对于上面的问题,编译器无能为力,因为它认为其是合法的,编译可以顺利通过,只有在运行时才会跑出异常。
List<int> list = new List<int>(); int i = 100; list.Add(i); string value = (string)list[0]; //编译错误到此,关于C#中泛型的理解讲解完毕,希望可以帮助大家进步。
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:泛型
原文地址:http://blog.csdn.net/quwenzhe/article/details/47107247