C#中的where泛型约束介绍

 更新时间:2020年6月25日 11:42  点击:2331

泛型约束的意思就是说:类的泛型,只能是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();
     }
 }


以上的代码运行结果:

[!--infotagslink--]

相关文章

  • pycharm 关闭search everywhere的解决操作

    这篇文章主要介绍了pycharm 关闭search everywhere的解决操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-01-16
  • C#中的where泛型约束介绍

    这个关于泛型约束的东西我看了几天了。一直没打看懂,我的领悟能力有点差,刚才突然明白了一点...2020-06-25
  • ThinkPHP Where 条件中常用表达式示例(详解)

    下面小编就为大家带来一篇ThinkPHP Where 条件中常用表达式示例(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2017-04-03
  • 基于torch.where和布尔索引的速度比较

    今天小编就为大家分享一篇基于torch.where和布尔索引的速度比较,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-05-02
  • MySQL怎样优化WHERE子句

    where优化主要是在SELECT中,因为他们最主要是在那里使用,但是同样的优化也可被用于DELETE和UPDATE语句。 但请注意,下面的优化并不是完全的。MYSQL实施了许多优化,但我没...2016-11-25
  • 浅析c#范型中的特殊关键字where & default

    以下是对c#范型中的特殊关键字where和default进行了详细的介绍,需要的朋友可以过来参考下...2020-06-25
  • 详解mysql 使用left join添加where条件的问题分析

    这篇文章主要介绍了详解mysql 使用left join添加where条件的问题分析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-02-08
  • ThinkPHP中where()使用方法详解

    where方法可以用于对数据库操作的结果进行筛选。即SQL查询语句中的where子句。本文给大家介绍ThinkPHP中where()使用方法详解,感兴趣的朋友参考下...2016-04-23
  • Mysql中where与on的区别及何时使用详析

    MySQL当中的限制条件可以使用on或者where,两者在不同的情况下具有不同而意义,这篇文章主要给大家介绍了关于Mysql中where与on的区别及何时使用的相关资料,需要的朋友可以参考下...2021-08-04
  • MySQL中where 1=1方法的使用及改进

    这篇文章主要介绍了MySQL中where 1=1方法的使用及改进,文章主要通对where 1 = 1的使用及改进展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下...2022-05-25
  • Mybatis的where标签使用总结梳理

    这篇文章主要介绍了Mybatis的where标签使用总结梳理,文章通过将Mybatis中where标签的基本使用形式展开where标签小技巧以及容易踩到的坑进行总结梳理,具有一定的参考价值,需要的小伙伴可以参考一下...2022-05-25
  • MyBatis中不建议使用where 1=1原因详解

    这篇文章主要为大家介绍了MyBatis中不建议使用where1=1的原因详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪...2022-06-22