欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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();
     }
 }


以上的代码运行结果:

上一篇:

下一篇: