C#中的where泛型约束介绍

时间:2021-05-20

泛型约束的意思就是说:类的泛型,只能是where字句后面所写的接口或类。
这么说好像也有点不大明白,举个例子。
我有一个接口,如下:
复制代码 代码如下:
///
/// 国籍的接口
///
public interface INationality
{
string Nationality
{
set;
get;
}
string GetNationality();
}

然后该接口有两个实现,如下:
复制代码 代码如下:
///
/// 中国人
///
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;
}
}

然后创建一个泛型类,带有泛型约束的类,如下:
复制代码 代码如下:
///
///
///

///
public class PrintNationality where T : INationality, new()
{
T item = new T();
public void Print()
{
Console.WriteLine(string.Format("Nationality:{0}", item.GetNationality()));
}
}

由于有where字句的泛型约束,所以,创建PrintNationality的对象时,T的类型只能是继承子INationality接口的类。
复制代码 代码如下:
public class Program
{
static void Main(string[] args)
{
PrintNationality _c = new PrintNationality();
PrintNationality _a = new PrintNationality();
//PrintNationality _o = new PrintNationality(); 此句是错误的,因为泛型类型必须是继承自INationality接口的类
_c.Print();
_a.Print();
Console.ReadKey();
}
}


以上的代码运行结果:

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章