一、自定義泛型
(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()表示無參數的構造函數,表示約束是引用類型並且有無參數的構造函數 { }
