当前位置:  编程技术>.net/c#/asp.net

C#中的where泛型约束介绍

    来源: 互联网  发布时间:2014-10-19

    本文导语:  泛型约束的意思就是说:类的泛型,只能是where字句后面所写的接口或类。这么说好像也有点不大明白,举个例子。我有一个接口,如下: 代码如下: /// /// 国籍的接口 /// public interface INationality {     string Nationality     {...

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


以上的代码运行结果:

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • having的用法以及与where区别介绍
  • SqlServer参数化查询之where in和like实现之xml和DataTable传参介绍
  • Mysql设置查询条件(where)查询字段为NULL
  • why can't i input chinese ? where? and how to do?
  • please tell me where to download java for linux?
  • where can i download simsun, and how can i use it?
  • sql筛选记录的语句之where、having的区别
  • 高分求JDK原码!!!!!!!!!!!where?????
  • where is thinking in java to download??
  • where is the ChinaLCT?
  • Could you tell me how/where to get GDB guides?
  • Where to download exchage server 2000 from?
  • PHP MySQL Where子句学习
  • 语句: select * from table where name=string 怎样判断一条记录都没找到的情况。
  • sqlserver 多表关联时在where语句中慎用trim()方法
  • MYSQL where 1=1判定中的作用说明
  • SQL 中having 和where的区别分析
  • 数据库查询Where子句问题?
  • 链接到XXX.jsp?strSql=select * from table where field like '%%'时,因为参数strSql中有%,在服务器段解码不正确,是咋回事?
  • rs=statement.executeQuery("SELECT Name,PassWord,Position FROM names where Name="+UserName+" and PassWord="+UserPassWord"");错了
  • where is wxSmith plug of platform on Unix Like and windows ?
  • where I can see all of the questions instead of only hot topics!
  • MySQL 存储过程传参数实现where id in(1,2,3,...)示例


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3