C#中的where泛型約束介紹
泛型約束的意思就是說:類的泛型,只能是where字句后面所寫的接口或類。
這么說好像也有點(diǎn)不大明白,舉個(gè)例子。
我有一個(gè)接口,如下:
///
/// 國籍的接口
///
public interface INationality
{
string Nationality
{
set;
get;
}
string GetNationality();
}
然后該接口有兩個(gè)實(shí)現(xiàn),如下:
///
/// 中國人
///
public class Chinese : INationality
{
private string _Nationality;
public string Nationality
{
set
{
_Nationality = value;
}
}
public string GetNationality()
{
return string.IsNullOrEmpty(_Nationality) ? "Default." : _Nationality;
}
}
///
/// 美國人
///
public class American : INationality
{
private string _Nationality;
public string Nationality
{
set { _Nationality = value; }
}
public string GetNationality()
{
return string.IsNullOrEmpty(_Nationality) ? "Default." : _Nationality;
}
}
然后創(chuàng)建一個(gè)泛型類,帶有泛型約束的類,如下:
///
///
///
///
public class PrintNationality where T : INationality, new()
{
T item = new T();
public void Print()
{
Console.WriteLine(string.Format("Nationality:{0}", item.GetNationality()));
}
}
由于有where字句的泛型約束,所以,創(chuàng)建PrintNationality的對(duì)象時(shí),T的類型只能是繼承子INationality接口的類。
public class Program
{
static void Main(string[] args)
{
PrintNationality _c = new PrintNationality();
PrintNationality _a = new PrintNationality();
//PrintNationality _o = new PrintNationality(); 此句是錯(cuò)誤的,因?yàn)榉盒皖愋捅仨毷抢^承自INationality接口的類
_c.Print();
_a.Print();
Console.ReadKey();
}
}
以上的代碼運(yùn)行結(jié)果:
相關(guān)文章
C#中使用DevExpress中的ChartControl實(shí)現(xiàn)極坐標(biāo)圖的案例詳解
這篇文章主要介紹了在C#中使用DevExpress中的ChartControl實(shí)現(xiàn)極坐標(biāo)圖,本案例是使用的是DevExpress 18.1.3版本,之前在14版本上也試過,但是有一個(gè)弊端就是實(shí)現(xiàn)極坐標(biāo)圖的時(shí)候,第一個(gè)點(diǎn)和最后一個(gè)點(diǎn)總是自動(dòng)多一條閉合線,會(huì)形成一個(gè)閉合的多邊形,因此升級(jí)了一下版2022-02-02
Unity UGUI的InputField輸入框組件使用詳解
這篇文章主要為大家介紹了Unity UGUI的InputField輸入框組件使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07
C#+無unsafe的非托管大數(shù)組示例詳解(large unmanaged array in c# without ‘u
這篇文章主要給大家介紹了關(guān)于C#+無unsafe的非托管大數(shù)組(large unmanaged array in c# without 'unsafe' keyword)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
C#微信公眾號(hào)開發(fā)之用戶上下文WeixinContext和MessageContext
這篇文章介紹了C#微信公眾號(hào)開發(fā)之用戶上下文WeixinContext和MessageContext,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06

