标签:继承中的构造函数
在Java基础中我们学“继承中的构造方法”时,强调了以下几点:
回顾.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这个抽象方法。
通过继承中的构造函数这一知识点,明白了项目架构图中在纵向角度各个类之间的关系。
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:继承中的构造函数
原文地址:http://blog.csdn.net/u010924834/article/details/47107075