首页 > 代码库 > C#中的泛型

C#中的泛型

、泛型

在C#中可以用<>占位符,来进行类型占位。由于泛型占位在编译之后就会被替换成对应的类型,所有可以重用,比object性能要好很多。但有一个不算太大的缺点:泛型占位在编译时必须确定类型(传入或编译器推断)。  

   泛型类  1.1 泛型类中占位符的几种约束

            a.基类约束 pulic class Hourse<T> where T:Pig 只能传入Pig类型             b.接口约束 pulic class Hourse1<T> where T:IPig 只能传入实现了IPig接口的类型             c.引用类型约束 pulic class Hourse2<T> where T:class 只能传入引用类  型             d.值类型约束 pulic class Hourse3<T> where T:struct 只能传入值类型             f.构造器约束 pulic class Hourse4<T> where T:new() 只能传入能被new  ()的类型  pulic class Hourse5<T> where T:class,new()     -class关键字必须在  前面 。这种方式只能传入能被new()的引用类型              多个占位符的约束写法: 每一个约束用一个where 开头。例:          pulic class Hourse6<T,V> where V:struct where T:class           1.2 泛型类的继承        a.非泛型类继承泛型类:              必须指定具体的父类占位符类型 public class Son:Person<string,int>         b.泛型类继承泛型类:             如果子类要将站位符传给父类,则必须与父类的约束保持一致            pulic class Son2<X,Y>:Person<X,Y>占位符类型,此时子类可以不加约束                      如果子类不传递占位符,那么必须为父类指定具体的              pulic calss Son3<X,Y>:Person<string,int>   1.3 封闭类型和开放类型的概念      编码时mylist<T> 是开发类型,运行时产生的具体类是封闭类型  自己实现的泛型类 ---》开放类型 ,可以更改          程序运行时生成的泛型类--》封闭类型,不可改       泛型方法         位置:泛型方法的类型参数,可以在该方法的 形参,方法体,返回值   1、泛型方法的占位符的

   2、泛型方法的重载条件               a.参数个数不一致  b.参数类型不一致(形参非泛型部分)c.方法类型占位符个数不一致   3、泛型方法的重写,注意不需要重写约束条件 ,默认会自己添加

   协变和逆变    只能用于泛型接口和泛型委托

协变: out  ->代表当前占位符只能当做返回类型,不能当做入参类型 逆变: in   ->代表当前占位符只能当做入参类型,不能当做返回类型

C#中的泛型