zoukankan      html  css  js  c++  java
  • 第二回 基类的架造方法应该为子类想的多一些

    C#允许一个类不去手动声明一个构造方法,因为.net内部为我们继承了它,它为自己为我们生成一个无参的架造方法,本文中我们讲的架造方法都属于实例构造方法,下面我们来说明几个问题:
    1 构造方法在何时执行

    2 基类的构造方法应该去子类考虑的多一些

    首先我们来说一下第一个问题,构造方法的执行时期,当类对象被new时,它会首先执行符合它(类)方法签名的构造方法,如这个语句

    Person person=new Person();

    这是我们经常看到的建立对象的语句,它事实上是去执行Person类型的public Person()这个方法的,当然,如果语句变成了

    Person person=new Person("zzl","male");

    那么,它要被执行的构造方法就变成了public Person(string name,string gander);

    而这两个方法的不同点就是方法签名上,方法2允许在建立对象时同时指定对象的两个属性,而方法1则另外再对属性赋值,很显然方法2对象程序员来说,更友好。

    OK,下面我们再来说一下”基类的构造方法应该去子类考虑的多一些”这个话题,其实在我上一讲中已经把代码粘贴上了,大家应该已经注意到了。

    考虑的多一些,这个意思是说,尽量让子类可以更清晰,更简洁的去使用基类的属性和方法等,在很多情况下,基类会向子类公开一些属性,而这些属性的创建很多时候是由子类决定的,所以基类应该保留友好的赋值接口。

    下面代码请看:

                /// <summary>
      7         /// 数据访问对象(只对子类可见)
      8         /// </summary>
      9         protected DataContext DB;
     10 
     11         #region Constructors
     12         public DataBase()
     13             : this(new LINQ.DataClasses1DataContext(System.Configuration.ConfigurationManager.ConnectionStrings["XXB"].ToString()))
     14         { }
     15         public DataBase(DataContext db)
     16             : this(() => { return db; })
     17         { }
     18         public DataBase(Func<DataContext> func)
     19         {
     20             this.DB = func();
     21         }
     22         #endregion

    事实上,它就是上一讲的代码片断,它向子类公开的DB这个属性,而DB的创建于子类决定,所以在基类构造方法中有3个重载,它在不同时候对子类有不同的使用,如
    public DataBase(Func<DataContext> func),它允许子类为基类传递一个Func委托人方法,这使得程序的灵活度提高了不少

     

  • 相关阅读:
    hive+mysql安装
    (转)hive sql 学习笔记(1)
    「CSPS 2020」动物园
    「CSPS 2019」Emiya 家今天的饭
    「CSPS 2020」儒略日
    「CSPS 2019」划分
    poj2251 Dungeon Master 搜索BFS
    poj1080 Human Gene Functions
    poj2349最小生成树prim算法
    hoj1356 Miller_Rabbin算法
  • 原文地址:https://www.cnblogs.com/lori/p/2623503.html
Copyright © 2011-2022 走看看