一、自定义泛型
(1)泛型类
//泛型类 public class MyClass<T> { public void SayHi(T arg) { Console.WriteLine(arg); } }
(2)泛型方法
public class MyClass1 { //泛型方法 public void SayHi<T>(T msg) { Console.WriteLine(msg); } }
(3)泛型接口
泛型接口
public interface IFace<T> { T SayHi(T msg); void SayHello(T msg); }
1).普通类来实现泛型接口
public class MyClass3 : IFace<string> { public void SayHello(string msg) { Console.WriteLine(msg); } public string SayHi(string msg) { return msg; } }
2).泛型类实现泛型接口
public class MyClass4<T> : IFace<T> { public void SayHello(T msg) { Console.WriteLine(msg); } public T SayHi(T msg) { return msg; } }
在调用的时候,需要传递数据类型才能new一个实例
二、自定义泛型的约束where
public class MyClass5<T,K,V,W,X,Y,Z> where T:struct //约束T必须是值类型 where K:class //约束K必须是引用类型 where V:IComparable //约束V必须实现IComparable,int就符合,原因是int类型实现了IComparable接口 where W:K //要求W必须是K类型或者K类型的子类 where X:class,new() //多个约束,其中new()表示无参数的构造函数,表示约束是引用类型并且有无参数的构造函数 { }