泛型(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); }