-
泛型
-
泛型基础
泛型概念: 泛型(generic)是C# 2.0推出的新语法,它是专门为处理多段代码在不同的数据类型上执行相同的指令的情况而设计的。 即泛型让不同的数据类型支持相同的业务逻辑。
泛型语法: <T>:T未知类型 多个未知类型:<T,K,M,N....>
为什么C#要引入泛型?1. 支持多种数据类型 2. 性能高(和object比,object会使用到拆箱 装箱操作)3.语法优美。
优点:代码复用 缺点:具体类型在转换成object类型时,使用了C#装箱,装箱会带性能损失。
-
代码举列
// <T>定义一个未知类型,泛型语法 // 泛型在定义时,并没有指定具体的类型,即指定具体类型延迟到方法调用时。 public static void Show2<T>(T a) { Console.WriteLine($"参数类型:{a.GetType().FullName},参数值:{a}"); }
调用Show 2 中的T可以是各种类型
-
泛型约束
常用的约束
where T1 : struct //解释:T1必须是值类型 where T2 : class //解释:T2必须是引用类型 where T3 : new() //解释:T3这个类型中,必须有一个无参数的构造方法,这个约束必须放到最后
泛型的逆变与协变
逆变和协变只能放在泛型接口和泛型委托参数前面,只发生在泛型中 out 协变(covariant ),用来修饰返回值 :小类型转大类型,隐式转换 in 逆变(contravariant),用来修饰传入参数: 大类型转小类型,强制转换 斜边判断 1.变量名称前必须是接口或委托 2.接口和委托必须是泛型的,且T前有关键字out 逆变判断 1.变量名称前必须是接口或委托 2.接口和委托必须是泛型的,且T前有关键字in