C#中泛型約束的具體用法

前言
上一篇博文簡(jiǎn)單介紹了泛型的約束,說(shuō)是通過(guò)where<>來(lái)實(shí)現(xiàn)具體委托占位符的約束。那么約束又有什么類(lèi)型和次序呢。
這篇文章咱們一起看看。
目前共5種類(lèi)型的約束。
類(lèi)名:只有這個(gè)類(lèi)型的類(lèi)或從它繼承的類(lèi)才能用作類(lèi)型實(shí)參 class:任何引用類(lèi)型,包含類(lèi),數(shù)組,委托,接口都可以用作類(lèi)型實(shí)參 struct:任何值類(lèi)型都可以做類(lèi)型實(shí)參 接口名:只有這個(gè)接口或?qū)崿F(xiàn)接口的類(lèi)型才能用作類(lèi)型實(shí)參 new(): 任何帶有無(wú)參公共構(gòu)造函數(shù)的類(lèi)型都可以用作類(lèi)型實(shí)參
在實(shí)現(xiàn)過(guò)程中,最多只能有一個(gè)主約束且必須放在第一位;可以有多個(gè)接口名約束;如果存在構(gòu)造函數(shù)約束,則必須放在最后。
泛型約束的具體用法
泛型其實(shí)定義聲明好后和類(lèi)型一樣。
有泛型方法、泛型委托和泛型接口。具體用法如下所示:
泛型方法
????????class?Ahui2?
????????{
????????????public?void?GetReverseAndPrintByAge(T[]?age)??
????????????{
????????????????Array.Reverse(age);
????????????????foreach?(var?item?in?age)
????????????????{
????????????????????Console.WriteLine("{0}"+item.ToString());
????????????????}
????????????????Console.WriteLine("");
????????????}
????????}
泛型委托
????????delegate?void?MyNameDelegate(T?value);
????????class?Ahui3?
????????{
????????????static?public?void?PrintString(String?tempName)?
????????????{
????????????????Console.WriteLine(tempName);
????????????}
????????????static?public?void?PrintUpperString(String?tempName)
????????????{
????????????????Console.WriteLine(tempName.ToUpper());?
????????????}
????????}???????????????
????????static?void?Main(string[]?args)
????????{
????????????var?myDel?=?new?MyNameDelegate(Ahui3.PrintString);
????????????myDel?+=?Ahui3.PrintUpperString;
????????????myDel("Andyahui");
????????????Console.ReadKey();
????????}
泛型接口
????????interface?IBaseAction?
????????{
????????????T?isLove(T?name);
????????}
????????class?Ahui?:?IBaseAction?
????????{
????????????public?S?isLove(S?name)
????????????{
????????????????return?name;
????????????}
????????}
????????????var?ahui=new?Ahui();
????????????var?ahui2?=?new?Ahui();
????????????Console.WriteLine(""+ahui.isLove("阿輝"));
????????????Console.WriteLine(""?+?ahui2.isLove(27));
泛型接口讓我們編寫(xiě)參數(shù)和接口成員返回類(lèi)型是泛型類(lèi)型實(shí)參的接口。泛型接口的聲明和非泛型接口的聲明差不多,但是需要在接口名稱(chēng)之后的尖括號(hào)中放置類(lèi)型參數(shù)。
需要注意兩點(diǎn):
實(shí)現(xiàn)不同類(lèi)型參數(shù)的泛型接口是不同的接口 可在非泛型類(lèi)型中實(shí)現(xiàn)泛型接口
其中實(shí)現(xiàn)泛型類(lèi)型接口時(shí),必須保證類(lèi)型實(shí)參組合不會(huì)在類(lèi)型中產(chǎn)生兩個(gè)重復(fù)的接口。
明天咱們將一起學(xué)習(xí)在泛型類(lèi)型創(chuàng)建過(guò)程中的一個(gè)主題,叫做可變性。分為協(xié)變、逆變、不變。
寄語(yǔ)
人生短暫,我不想去追求自己看不見(jiàn)的,我只想抓住我能看得見(jiàn)的。
原創(chuàng)不易,給個(gè)關(guān)注。
評(píng)論
圖片
表情
