C#类的继承,构造函数实现及其调用顺序

类层层派生,在实例化的时候构造函数的调用顺序是怎样的? --从顶层基类开始向子类方向顺序调用无参构造.

默认构造(无参构造)和带参构造什么时候调用?--默认将从顶层父类的默认构造一直调用到当前类的默认构造.

下面是示例:

/*--===------------------------------------------===---

作者:许明会

日期:类的派生和构造函数间的关系,调用层次及实现

日期:2008年1月18日 17:30:43

希望类有派生类,且有带参构造函数,则必须为其实现默认构造函数,并实现类层次中的所有派生类的默认构造函数。

若类没有实现带参构造,编译器将自动创建默认构造函数(无参构造函数),若类实现了带参构造,则编译器不会自动生成默认构造.

--===------------------------------------------===---*/

using System;

namespace xumh

{

public class MyClass

{

public MyClass()

{

Console.WriteLine("MyClass:默认构造函数,因为本类有带参构造,所以默认构造必须显式实现");

}

public MyClass(int a, int b)

{

Console.WriteLine("MyClass带参构造:a={0}, b={1}.", a, b);

}

}

public class MyClass2 : MyClass

{

public MyClass2()

{

Console.WriteLine("MyClass2:默认构造函数,必须显式实现基类的无参构造函数!");

}

public MyClass2(int a, int b)

{

Console.WriteLine("MyClass2带参构造:a={0}, b={1}.尽管MyClass3有带参构造,但只有显式调用带参构造,否则总是呼叫默认构造", a, b);

}

}

public class MyClass3 : MyClass2

{

public MyClass3()

{

Console.WriteLine("MyClass3:默认构造函数,因该类有带参构造,所以必须显式实现所有积累的默认构造");

}

public MyClass3(int a, int b)

{

Console.WriteLine("MyClass3带参构造:a={0}, b={1}.", a, b);

}

}

public class runMyApp

{

static void Main()

{

MyClass3 my3 = new MyClass3();

Console.WriteLine();

MyClass3 my = new MyClass3(3, 4);

Console.ReadKey();

}

}

}

/*--===------------------------------------------===---

输出如下:

MyClass:默认构造函数,因为本类有带参构造,所以默认构造必须显式实现

MyClass2:默认构造函数,必须显式实现基类的无参构造函数!

MyClass3:默认构造函数,因该类有带参构造,所以必须显式实现所有积累的默认构造

MyClass:默认构造函数,因为本类有带参构造,所以默认构造必须显式实现

MyClass2:默认构造函数,必须显式实现基类的无参构造函数!

MyClass3带参构造:a=3, b=4.

* --===------------------------------------------===---*/