C#中的where泛型约束介绍
程序员文章站
2023-12-15 08:43:46
泛型约束的意思就是说:类的泛型,只能是where字句后面所写的接口或类。这么说好像也有点不大明白,举个例子。我有一个接口,如下:复制代码 代码如下: ///&nb...
泛型约束的意思就是说:类的泛型,只能是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();
}
}
以上的代码运行结果: