泛型

泛型(generic)是C#语言2.0和通用语言运行时(CLR)的一个新特性。泛型为.NET框架引入了类型参数(type parameters)的概念。类型参数使得设计类和方法时,不必确定一个或多个具体参数,其的具体参数可延迟到客户代码中声明、实现。这意味着使用泛型的类型参数T,写一个类MyList<T>,客户代码可以这样调用:MyList<int>, MyList<string>或 MyList<MyClass>。这避免了运行时类型转换或装箱操作的代价和风险。

 

为什么要使用泛型?

当我们声明一个 List<object> 集合时,可以随便往这个集合里添加数据,int 类型,double 类型,string 类型,char 类型  等,当我们取数据时··这个时候就需要进行转换,转换时会发生异常,数据精度丢失比如把小数转成了整数 ,(当然还有装箱拆箱 )  。类型转换和装箱、拆箱的操作都降低了性能

这个时候泛型是不是就可避免上面大部分的问题了

 

泛型的优点? 

1:复用   例如

        /// <summary>
        /// 打印个int值
        /// </summary>
        /// <param name="iParameter"></param>
        public static void ShowInt(int iParameter)
        {
            Console.WriteLine("This is {0},parameter={1},type={2}",
                typeof(CommonMethod).Name, iParameter.GetType().Name, iParameter);
        }
        /// <summary>
        /// 打印个string值
        /// </summary>
        /// <param name="sParameter"></param>
        public static void ShowString(string sParameter)
        {
            Console.WriteLine("This is {0},parameter={1},type={2}",
                typeof(CommonMethod).Name, sParameter.GetType().Name, sParameter);

            //typeof(string)
            //typeof(Type)
        }
        /// <summary>
        /// 打印个DateTime值
        /// </summary>
        /// <param name="oParameter"></param>
        public static void ShowDateTime(DateTime dtParameter)
        {
            Console.WriteLine("This is {0},parameter={1},type={2}",
                typeof(CommonMethod).Name, dtParameter.GetType().Name, dtParameter);
        }

        /// <summary>
        /// 打印个object值   
        /// 1 任何父类出现的地方,都可以用子类来代替
        /// 2 object是一切类型的父类
        /// 上面的3个方法当使用 object 类型 何为一个时会有
        /// 2个问题:
        /// 1 装箱拆箱 2数据类型精度 
        /// </summary>
        /// <param name="oParameter"></param>
        public static void ShowObject(object oParameter)
        {
            Console.WriteLine("This is {0},parameter={1},type={2}",
                typeof(CommonMethod), oParameter.GetType().Name, oParameter);
        }

  这个时候 使用泛型的好处就体现出来了 

     /// <summary>
       /// 类型参数实际上就是一个类型T声明,方法就可以用这个类型T了
        ///           
        /// 思考下,泛型为什么也可以,支持多种不同类型的参数
        /// 泛型声明方法时,并没有写死类型,T是什么,不知道
        /// T要等着调用的时候才指定

        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="tParameter"></param>
        public static void Show<T>(T tParameter)//, T t = default(T
        {
            Console.WriteLine("This is {0},parameter={1},type={2}",
               typeof(CommonMethod), tParameter.GetType().Name, tParameter);
        }

  

 

posted @ 2019-06-12 22:55  逆流而下  阅读(131)  评论(0编辑  收藏  举报