C#泛型
2021-07-10 08:08
标签:nim 构造函数 constrain 构造 派生类 interface turn return 实现 1.声明泛型类 声明泛型类和普通类差不多 public class mytest public T1 somevar=new T1(); public T2 othervar=new T2(); } 构造类型则在构造函数中 mytest 变量声明: mytest var t=new mytest 2.用where语句进行约束 关键字 约束列表 where TypeParam : constraint , constraint 类型参数 共有五种类型参数: 约束类型 描述 类名 只有这个类型的类,或者继承这个类型 class 任何引用类型,包括类、数组、委托和接口都可以用作类型实例 struct 任何值类型都可以用作类型实参 接口名 只有这个接口或实现这个接口 new() 任何带有无参公共构造函数的类型。这叫做构造类型约束 3.泛型方法 与其他泛型不一样方法是成员,可以在泛型与非泛型中实现 public void PrintfData 调用泛型方法: Mymethod 推断类型,如果只有一个参数则 public vod test int t=5; test(t); 4.泛型接口 interface IMyFc T ReturnIt(T value);} class test public S ReturnIt(S invalue){ return invalue;} 5.可变性 协变:( 需要添加关键字 out )能让基类泛型引用连接到派生类泛型引用,如果在有派生类关键字只需要加在派生类,逆变一样。 class Animal{ public int legs=4;} class Dog:Animal{} delegate T Factory class Program{ static Dog MakeDog(){ return new Dog();} static void main(){ Factory Factoryani=dog;//报错 } 兼容性原则在这个例子不适用,俩个委托同级。我们需要一个Animal对象,返回一个dog的引用也可以变成Animal,但委托需要的是Animal,所以委托不匹配。如果派生类只用于输出值,这种结构化的委托有效性的常数之间关系叫做协变。 在delegate T Factory 逆变:(需要添加关键字 in)能够让派生类泛型连接基类泛型引用 class Animal{ public int legs=4;} class Dog:Animal{} delegate void Action class Program{ static void Anto(Animal a){ Console.WriteLine(“{0}”,a.Legs);} static void main(){ Actionact1=Anto; Action dog1(new dog()); } 协变:因为像期望那样,调用获得了一个指向基类的引用。 逆变:因为像期望那样,被调用的方法收到了一个基类的引用。 C#泛型 标签:nim 构造函数 constrain 构造 派生类 interface turn return 实现 原文地址:https://www.cnblogs.com/dlvguo/p/9688412.html泛型能实现逻辑的重复使用。C#提供5种泛型类、结构、接口、委托和方法。
(S p,T t)where S:person{}:IMyfc{