泛型编程

 

泛型编程让你编写完全一般化并可重复使用的算法,其效率与针对某特定数据类型而设计的算法相同。      
通过泛型可以定义类型安全的数据结构,而无须使用实际的数据类型。这能够显著提高性能并得到更高质量的代码,因为您可以重用数据处理算法,而无须复制类型特定的代码
假设有一个方法,要实现一个重复的功能如下:
 
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();
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值