一点一点学架构(二)——继承中的构造函数调用
来源:互联网 发布:淘宝网首页女装春装 编辑:程序博客网 时间:2024/06/06 16:27
前言
在Java基础中我们学“继承中的构造方法”时,强调了以下几点:
- 子类构造过程必须调用其基类的构造过程。
- 可以通过显示调用或系统默认的方式调用基类的构造过程。
- 显示调用:通过Super(参数)来调用,且必须放在子类构造方法的第一行。
- 系统默认调用:调用基类的无参构造函数。
回顾.NET,道理也是一样的。
本文,首先以一个Demo给大家解释一下该知识点,然后再结合项目说一下该知识点的具体应用。
示例
public class GrandFather { public GrandFather() { Console.WriteLine("GrandFather:默认构造函数"); } public GrandFather(int a, int b) { Console.WriteLine("GrandFather带参构造:a={0}, b={1}.", a, b); } } public class Father : GrandFather { public Father() { Console.WriteLine("Father:默认构造函数"); } public Father(int a, int b) { Console.WriteLine("Father带参构造:a={0}, b={1}.", a, b); } } public class Child : Father { public Child() { Console.WriteLine("Child:默认构造函数"); } public Child(int a, int b) { Console.WriteLine("Child带参构造:a={0}, b={1}.", a, b); } } class Program { static void Main(string[] args) { Child mychild = new Child(1,2); } }
程序在实例化Child这个子类时,会先调用最上层父类的构造函数,再调用父类的构造函数,然后再调用自己的构造函数,执行结果如下图所示:
项目中应用
BLL层
当我们实例化B层的一个具体业务类时如:
new UserInfoBLL()时,程序执行过程:
这时,首先调用最上层父类的构造方法CoreBaseService(),在这个构造方法里调用了另外两个方法:SetDbSession(),SetCurrentDal()。
/// <summary> /// 构造函数初始化 /// </summary> public CoreBaseService() { SetDbSession(); SetCurrentDal(); } //子类必须实现此方法来确定具体的DbSession对象 public abstract void SetDbSession(); //子类必须实现此方法,设置当前具体的Dal public abstract void SetCurrentDal();
这两个方法在CoreBaseService中没有实现,所以会去它的子类中寻找实现。所以紧接着在BaseService中找到了SetDbSession的实现,然后在UserInfoBLL中找到了SetCurrentDal的实现。
然后,调用父类BaseService的构造函数。
最后,调用自身构造函数UserInfoBLL(),获得实例。
DAL层
在CoreBaseDal的构造方法中调用了SetDbContext这个抽象方法。
总结
通过继承中的构造函数这一知识点,明白了项目架构图中在纵向角度各个类之间的关系。
0 0
- 一点一点学架构(二)——继承中的构造函数调用
- 一点一点学架构(三)——Spring.NET IOC
- 一点一点学java—概览
- 继承关系中的构造函数调用
- 继承中的构造函数调用顺序
- 继承中的构造函数调用顺序
- 一点一点学maven(08)——maven聚合和继承
- 一点一点重学统计学(二)——二项、泊松和正态分布
- 一点一点学架构(一)——变是永远不变的
- 一点一点学架构(四)—Spring.NET错误Cannot Resolve Type……
- 一点一点学ASP.NET之基础概念——HttpModule (二)
- 从零开始学C++之继承(二):继承与构造函数、派生类到基类的转换
- 从零开始学C++之继承(二):继承与构造函数、派生类到基类的转换
- 从零开始学C++之继承(二):继承与构造函数、派生类到基类的转换
- 黑马程序员——类继承结构中的构造函数
- C++学习笔记48——继承中的构造函数
- JAVA基础6.49——继承中的构造函数
- 继承中的构造方法调用
- Treap树
- Android—shape画虚线
- Window 查指定端口并杀进程
- mongoDB 入门指南、示例
- 第二十三、四章:杨氏矩阵查找,倒排索引关键词Hash不重复编码实践
- 一点一点学架构(二)——继承中的构造函数调用
- 【leetcode-29】Divide Two Integers(C)
- 自定义控件(一)
- Android中的Handler的post方法详解
- Oracle到SAP HANA实时复制系列(三):Replication Agent的安装与配置
- AppDelegate中方法执行的时机
- cocos2dx3.2 Label 自动换行,各种label创建方式,描边,阴影,发光等;
- 解决ScrollView下嵌套ListView/GridView进页面不在顶部的问题以及数据显示不全的问题( 只显示一行)
- hdu 4149 magic potion 位运算