泛型编程让你编写完全一般化并可重复使用的算法,其效率与针对某特定数据类型而设计的算法相同。
通过泛型可以定义类型安全的数据结构,而无须使用实际的数据类型。这能够显著提高性能并得到更高质量的代码,因为您可以重用数据处理算法,而无须复制类型特定的代码。
假设有一个方法,要实现一个重复的功能如下:
class Stack<T>//泛型类,其中T是泛型类接受的参数类型 声明时要使用<T>格式
{
private T[] store;//泛型数组
private int size;
public Stack()
{
store = new T[100000];//数组范围为-
size = 0;
}
public void Push(T x)//实例化一个泛型方法参数类型为T(T是实例化类时定义的类型)
{
store[size++] = x;
}
public T Pop()//返回一个T类型的变量
{
return store[--size];
}
}
这样一个方法就可以接受多种参数,进行相同的处理返回一个有特定类型的数组。
Stack<string> stack = new Stack<string>(); //实例化泛型类并给泛型类传递一个string类型参数
stack.Push("ni hao");stack.Push("wo buhao"); //根据实例化类时定义的类型传递参数
Stack<int> stack1 = new Stack<int>(); //实例化泛型类并给泛型类传递一个int类型参数
stack1.Push(1);stack1.Push(2);
如果没有泛型那么实现同样的功能是相当麻烦的(方法的重写)。使用Object难免会照成类型转换错误,而其对性能也有很大的影响。
class Stack_Object
{
private object[] store;//object数组
private int size;
public Stack_Object()
{
store = new object[100000];
size = 0;
}
public void Push(object x)//object类型参数
{
store[size++] = x;
}
public object Pop()//返回一个object类型参数
{
return store[--size];
}
}
经过循环测试1000次循环时用时相差不大 当达到10000次时两者的用时相差了1秒,因此在大型项目开发中广泛使用泛型可以大大他高程序的效率,使程序可读性更强,代码量减少。
测试代码:
static void Main(string[] args)
{
int b;
Stopwatch watch = new System.Diagnostics.Stopwatch();//实例化测试类
watch.Start();//测试开始
for (int i = 0; i < 1000; i++)
{
Stack<int> stack = new Stack<int>();//实例化泛型类并给泛型类传递一个int类型参数
stack.Push(1);//根据实例化类时定义的类型传递参数
stack.Push(2);
b = stack.Pop();//返回int型参数
}
watch.Stop();//测试结束
TimeSpan ts = watch.Elapsed;
Console.WriteLine(ts.ToString());
Stopwatch watch1 = new System.Diagnostics.Stopwatch();
watch1.Start();//测试开始
for (int i = 0; i < 1000; i++)
{
Stack_Object stacka = new Stack_Object();//创建object类并给objcet类传递一个object类型参数
stacka.Push(1);
stacka.Push(2);
b = (int)stacka.Pop();//返回object参数后进行拆箱操作
}
watch1.Stop();//测试结束
TimeSpan tm = watch1.Elapsed;
Console.Write(tm.ToString());
Console.Read();
}