当前位置: 移动技术网 > IT编程>开发语言>c# > C#中的where泛型约束介绍

C#中的where泛型约束介绍

2019年07月18日  | 移动技术网IT编程  | 我要评论
泛型约束的意思就是说:类的泛型,只能是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();
     }
 }


以上的代码运行结果:

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网