10.5 类的初始化顺序

类的初始化顺序是:

(1)首先,初始化类的实例字段;

(2)其次,调用基类的构造函数,没有明确的基类则调用System.Object的构造函数;

(3)最后,调用类自己的构造函数。

如图10-3所示。

10.5 类的初始化顺序 - 图1

图 10-3 类的初始化顺序

下面,我们通过一个实例来了解这种初始化顺序,如代码清单10-6所示。

代码清单10-6 类的初始化顺序


1 using System;

2

3 namespace ProgrammingCSharp4

4{

5 class BaseClass

6{

7 public BaseClass()

8{

9 Console.WriteLine(“基类构造函数被调用”);

10}

11}

12

13 class ChildClass:BaseClass

14{

15 public bool FieldA=true;

16 public bool FieldB;

17 public ChildClass()

18{

19 Console.WriteLine(“自己的构造函数被调用”);

20}

21

22 public void Print()

23{

24 Console.WriteLine(FieldA);

25 Console.WriteLine(FieldB);

26}

27}

28

29 class ClassExample

30{

31 public static void Main()

32{

33 ChildClass child=new ChildClass();

34 child.Print();

35}

36}

37}


我们在第33行初始化了类ChildClass,它的基类是BaseClass,那么它的初始化顺序如表10-5所示。

10.5 类的初始化顺序 - 图2

代码清单10-6 的运行结果为:


基类构造函数被调用

自己的构造函数被调用

True

False