当前位置:编程学习 > 网站相关 >>

c#之泛型的类型安全与性能提高实例代码讲解

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;

namespace 泛型
{
    class Program
    {
        static void Main(string[] args)
        {
            // 泛型解决的问题:

            //一 避免拆箱与装箱
            //例: 我们在写一个方法时如果有这样的需求,传一个参数,这个参数可以是int或者string,或者其他的自定义的对象,或者结构,这时有两种做法,1分别写2个方法做重载,2用object做参数。。

            //1分别写2个方法做重载,增加了代码量,而且方法内好多代码是相同的,不推荐
            //2用object做参数。。 这样必定在方法体内有大量的装箱拆箱,类型转换,影响性能,不推荐
           
            //例:非泛型ArrayList
            ArrayList arr = new ArrayList();
            arr.Add(100);
            //public virtual int Add(object value); 我们看add方法的定义,是以object value做参数的
            //所以在Add传入值类型(100)时,必然会产生隐式装箱
            //然后我们在读取值时:必须这样写
            int value = (int)arr[0]; //在此处,为了读取出我们的值类型数据,又出现了拆箱操作。
            Console.WriteLine( value );
            //以上操作频繁拆箱装箱,不推荐 !

            //下面演示一下泛型集合类的操作
            List<int> list = new List<int>();
            list.Add(100);
            int value2 = list[0];
            Console.WriteLine( value2 );
            //以上操作中,泛型定义为int,是在JIT编译器动态生成类中使用,不会产生装箱与拆箱操作。


            //二,类型安全
            //如果没有泛型,我们之前的ArrayList中是用object做参数,那么就是说,可以添加int也可以是string
            ArrayList arr3 = new ArrayList();
            arr3.Add(100);
            arr3.Add( "100");
            //以上代码是不会在编译时报错的
            //然后我们跌代输出
            foreach (int i in arr3)
            {
                Console.WriteLine(i);
            }
            //运行时出错了,呵呵,到底是按int处理,还是string谁知道?
            //虽然我们可以手动避免这种问题,我add时注意不就行了吗?
            //但这样是类型不安全的,泛型做了一种强制安全

            List<int> list2 = new List<int>();
            list2.Add(100);
            //list2.Add("100"); //编译时报错

            Console.ReadLine();
        }
    }
}
补充:综合编程 , 安全编程 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,