第二回 基类的架造方法应该为子类想的多一些

简介:

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委托人方法,这使得程序的灵活度提高了不少

本文转自博客园张占岭(仓储大叔)的博客,原文链接:第二回 基类的架造方法应该为子类想的多一些,如需转载请自行联系原博主。

目录
相关文章
|
3月前
|
存储 C++ 容器
第十四章:C++虚函数、继承和多态详解
第十四章:C++虚函数、继承和多态详解
28 0
|
7月前
细谈抽象类
抽象类 1.抽象类是被abstract修饰的类 2.抽象类中的抽象方法 3.抽象类中可以有和普通类一样的成员变量和成员方法 4.抽象类不能被实例化 5.那么抽象类不能被实例化要它有何用???
27 0
|
8月前
|
存储 安全 编译器
【巧妙继承】C++玩转继承的神级技巧
【巧妙继承】C++玩转继承的神级技巧
|
9月前
|
C++
自考学习C++ 继承与派生
自考学习C++ 继承与派生
|
10月前
重写前奏~继承和多态
上次说到的重载是指同一类中方法和方法之间的关系,这次向大家介绍的重写是子不同类中方法和方法的关系;在介绍重写之前,要先说说继承和多态;
|
11月前
|
C++
第十三章 类继承
第十三章 类继承
64 0
|
Java Maven
你有没有掉进去过这些 抽象类 和 接口 的 “陷阱“
你有没有掉进去过这些 抽象类 和 接口 的 “陷阱“
你有没有掉进去过这些 抽象类 和 接口 的 “陷阱“
|
Java
Java多态——概念
Java多态——概念
85 0
|
Java 数据库
后浪拍前浪-覆写父类方法 | 带你学《Java面向对象编程》之三十九
既然出现了继承的关系,那么就存在子类和父类的联系,而在子类之中有可能定义和父类完全相同的方法或属性的名称,这个时候就称为覆写。
后浪拍前浪-覆写父类方法   | 带你学《Java面向对象编程》之三十九
先鸡后蛋-继承类实例化分析 | 带你学《Java面向对象编程》之三十七
本节结合实例讲解了继承类实例化的详细过程,并通过另一则案例验证了实例化继承类的同时必先实例化父类的说法。