C#中的各種泛型
阿新 • • 發佈:2018-12-26
上一篇文章簡單瞭解了一下強型別以及泛型的知識。其實,在.net類庫中有很多的泛型定義,最典型也是我們用的最多的就是List<>和Dictionary<Tkey,Tvalue>兩個泛型集合。這只是微軟我們提供的,在實際開發中,我們很多時候還需要自己定義一些泛型,今天就接著上次的內容來具體學習一下泛型的各種定義。
一、泛型類
1.定義
2.泛型類的例項化//泛型類,泛型的好處,還是程式碼重用。 // where yzk : struct泛型約束 //where T : struct表示只能是值型別 public class MyClass<yzk, sk, jk, nrg, yhb> where yzk : struct //限定yzk只能是值型別 where sk : class, IComparable //限定sk只能是引用型別 where jk : ICollection, new() //表示jk必須是實現了ICollection介面的型別 where yhb : nrg { public yzk[] _data; public sk _ss; public jk _jj; public MyClass(params yzk[] objs) { this._data = objs; } public void SayHi(yzk msg) { Console.WriteLine(msg); } public void Show() { foreach (var item in _data) { Console.WriteLine(item); } } }
static void Main(string[] args) { MyClass<string> mc = new MyClass<string>("aaa", "bbbb", "ccc"); mc.SayHi("大家好。"); MyClass<int> mcc = new MyClass<int>(1, 2, 3, 4); mcc.Show(); Console.ReadKey(); }
二、泛型介面
1.定義
public interface IFlyable<T>
{
void Fly(T msg);
}
2.介面的繼承
類實現介面的時候有兩種情況:該類是普通的類、該類也是泛型類
普通類
public class MyClass : IFlyable<string> { #region IFlyable<string> 成員 public void Fly(string msg) { throw new NotImplementedException(); } #endregion } public class MyClass1 : IFlyable<int> { #region IFlyable<int> 成員 public void Fly(int msg) { throw new NotImplementedException(); } #endregion }
泛型類
public class MyClass2<yzk> : IFlyable<yzk>
{
#region IFlyable<T> 成員
public void Fly(yzk msg)
{
throw new NotImplementedException();
}
#endregion
}
三、泛型方法
public void SayHi<T>(T msg)
{
Console.WriteLine(msg);
}
注意:對於泛型方法,呼叫的時候,可以指定泛型,也可以不指定泛型,可以自動推斷。
//mc.SayHi<int>(100);
// mc.SayHi<string>("aaaaaaaaaaaaaaaa");
//mc.SayHi(1000);
四、泛型委託
public delegate void Notice<T>(T name);