一点一点学架构(二)——继承中的构造函数调用

来源:互联网 发布:淘宝网首页女装春装 编辑:程序博客网 时间: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