C#中的where泛型约束介绍

时间:2022-11-26 12:21:34 

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


以上的代码运行结果:

标签:where,泛型约束
0
投稿

猜你喜欢

  • Android SQLite数据库增删改查操作的案例分析

    2022-06-06 02:55:03
  • Java中通过Class类获取Class对象的方法详解

    2021-11-09 17:12:57
  • java多线程并发中使用Lockers类将多线程共享资源锁定

    2021-11-14 11:08:37
  • C#实现窗体全屏的两种方法

    2021-10-06 19:14:04
  • Android.bp语法和使用方法讲解

    2022-09-29 19:31:19
  • SpringBoot外部化配置使用Plus版的方法示例

    2022-12-21 01:03:46
  • Java实现选择排序

    2021-06-30 16:53:55
  • Java中MessageDigest来实现数据加密的方法

    2023-05-18 01:13:49
  • spring boot springMVC扩展配置实现解析

    2023-11-25 10:32:53
  • JVM之方法返回地址详解

    2022-05-02 07:58:27
  • 深入浅析jni中的java接口使用

    2023-07-22 19:54:23
  • Android SDK Manager解决更新时的问题 :Failed to fetch URL...

    2023-03-17 23:23:36
  • Android应用内悬浮窗Activity的简单实现

    2023-07-28 04:03:00
  • Java实现TopK问题的方法

    2023-11-10 20:32:14
  • java链式创建json对象的实现

    2023-11-12 12:36:51
  • 使用注解解决ShardingJdbc不支持复杂SQL方法

    2022-08-03 02:15:12
  • Java多线程下的单例模式参考

    2023-11-09 00:40:15
  • 关于Java float和double精度范围大小

    2023-11-29 00:52:01
  • C#获取汉字字符串拼音首字母的方法

    2022-09-06 14:01:12
  • Android中监听未接来电的2种方法

    2023-11-02 10:44:48
  • asp之家 软件编程 m.aspxhome.com