继承中构造函数调用顺序
时间:2011-04-01 来源:hfliyi
先执行成员变量的初始化表达式 然后执行父类的构造函数,最后调用自己的构造函数:
View Code1 class Ref
2 {
3 public Ref(string s)
4 {
5 Console.WriteLine(s);
6 }
7 }
8 class BaseClass
9 {
10 public Ref my = new Ref("BaseClass初始化表达式");
11 public BaseClass()
12 {
13 Console.WriteLine("BaseClass的构造方法被调用");
14 }
15
16 }
17 class A : BaseClass
18 {
19 public Ref my = new Ref("A的初始化表达式");
20 public A()
21 {
22 Console.WriteLine("A的构造方法被调用");
23 }
24 }
25 class B : A
26 {
27 public Ref my = new Ref("B的初始化表达式");
28 public B()
29 {
30 Console.WriteLine("B的构造方法被调用");
31 }
32 }
33 class C : B
34 {
35 public Ref my = new Ref("C的初始化表达式");
36 public C()
37 {
38 Console.WriteLine("C的构造函数被调用!");
39 }
40 }
通过上面的例子,可以知道我们类的派生顺序是:BaseClass->A->B->C;按照刚刚所说的 先执行成员变量的初始化表达式 然后执行父类的构造函数,
那么我们的程序执行是,先执行C的成员变量初始化表达式,然后执行B的构造,最后调用C的构造。再构造B的时候,该原则任然被执行。
程序结果:
C的初始化表达式
B的初始化表达式
A的初始化表达式
BaseClass初始化表达式
BaseClass的构造方法被调用
A的构造方法被调用
B的构造方法被调用
C的构造函数被调用!
相关阅读 更多 +