C#中的where泛型約束介紹
泛型約束的意思就是說(shuō):類的泛型,只能是where字句后面所寫的接口或類。
這么說(shuō)好像也有點(diǎn)不大明白,舉個(gè)例子。
我有一個(gè)接口,如下:
///
/// 國(guó)籍的接口
///
public interface INationality
{
string Nationality
{
set;
get;
}
string GetNationality();
}
然后該接口有兩個(gè)實(shí)現(xiàn),如下:
///
/// 中國(guó)人
///
public class Chinese : INationality
{
private string _Nationality;
public string Nationality
{
set
{
_Nationality = value;
}
}
public string GetNationality()
{
return string.IsNullOrEmpty(_Nationality) ? "Default." : _Nationality;
}
}
///
/// 美國(guó)人
///
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#實(shí)現(xiàn)DataTable轉(zhuǎn)換成IList的方法
這篇文章主要介紹了C#實(shí)現(xiàn)DataTable轉(zhuǎn)換成IList的方法,涉及C#針對(duì)DataTable操作的相關(guān)技巧,需要的朋友可以參考下2016-03-03
C#調(diào)用OpenXml讀取excel行數(shù)據(jù)
這篇文章主要為大家詳細(xì)介紹了C#如何調(diào)用OpenXml實(shí)現(xiàn)讀取excel行數(shù)據(jù),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-12-12
C#自定義函數(shù)NetxtString生成隨機(jī)字符串
這篇文章主要介紹了C#自定義函數(shù)NetxtString生成隨機(jī)字符串,是十分常見(jiàn)的重要功能,需要的朋友可以參考下2014-08-08
C#訪問(wèn)SQLServer增刪改查代碼實(shí)例
使用C#實(shí)現(xiàn)在Excel中高效生成和操作表格

