C#中的where泛型约束介绍

 更新时间:2013年04月27日 10:56:38   作者:  
这个关于泛型约束的东西我看了几天了。一直没打看懂,我的领悟能力有点差,刚才突然明白了一点

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


以上的代码运行结果:

相关文章

  • WPF实现倒计时转场动画效果

    WPF实现倒计时转场动画效果

    这篇文章主要介绍了如何利用WPF实现倒计时转场动画效果,文中的示例代码讲解详细,对我们学习或工作有一定帮助,需要的可以参考一下
    2022-08-08
  • C#应用BindingSource实现数据同步的方法

    C#应用BindingSource实现数据同步的方法

    这篇文章主要介绍了C#应用BindingSource实现数据同步的方法,需要的朋友可以参考下
    2014-08-08
  • WPF弹出自定义窗口的方法

    WPF弹出自定义窗口的方法

    这篇文章主要介绍了WPF弹出自定义窗口的方法,结合实例形式分析了WPF自定义窗口的创建与调用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2016-07-07
  • C#中读取硬件温度的3种方法对比

    C#中读取硬件温度的3种方法对比

    这篇文章主要为大家详细介绍了C#中读取硬件温度的3种方法对比,文中的示例代码简洁易懂,具有一定的借鉴价值,感兴趣的小伙伴可以了解下
    2025-09-09
  • c# SQLHelper(for winForm)实现代码

    c# SQLHelper(for winForm)实现代码

    数据连接池c# SQLHelper 实现代码
    2009-02-02
  • 微信小程序支付C#后端源码

    微信小程序支付C#后端源码

    这篇文章主要为大家详细介绍了微信小程序支付C#后端源码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08
  • C#枚举类型与位域枚举Enum

    C#枚举类型与位域枚举Enum

    这篇文章介绍了C#中的枚举类型与位域枚举Enum,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • C#中XmlTextWriter读写xml文件详细介绍

    C#中XmlTextWriter读写xml文件详细介绍

    .NET中包含了很多支持XML的类,这些类使得程序员使用XML编程就如同理解XML文件一样简单。在这篇文章中,我将给出这样的一个类的使用示例,这个类就是XmlTextWriter类
    2013-04-04
  • C#自定义事件模拟风吹草摇摆效果

    C#自定义事件模拟风吹草摇摆效果

    这篇文章主要介绍了C#自定义事件模拟风吹草摇摆效果,草地上每一颗草都监听HoverTreeWindEvent事件,根据风向(WindDdirection)调整姿态。需要的朋友可以参考下
    2017-08-08
  • P/Invoke之C#调用动态链接库DLL示例详解

    P/Invoke之C#调用动态链接库DLL示例详解

    这篇文章主要为大家介绍了P/Invoke之C#调用动态链接库DLL示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03

最新评论