标签:泛型
接着深入理解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