- Derived static fields//派生类静态字段
- Derived static constructor//派生来静态构造函数
- Derived instance fields//派生类实例字段
- Base static fields//基类静态字段
- Base static constructor//基类静态构造函数
- Base instance fields//基类实例字段
- Base instance constructor//基类实例构造函数
- Derived instance constructor//派生类实例构造函数
1
using System;
2
3
namespace ObjectInit
4
下面是程序执行结果:
Derived.Static.Field1
Derived.Static.Field2
Derived.Static.Constructor
Derived.Instance.Field1
Derived.Instance.Field2
Base.Static.Field1
Base.Static.Field2
Base.Static.Constructor
Base.Instance.Field1
Base.Instance.Field2
Base.Instance.Constructor
Base.Instance.Field3
Derived.Instance.Virtual
Derived.Instance.Constructor
Derived.Instance.Field3
2
3
4
C#对象初始化的原则 :
- Fields then Constructor. //先初始化字段,后执行构造函数.
- Static then Instance. //在第一次访问类时,先初始化静态字段和构造函数,后初始化对象的实例字段和构造函数.
- Derived then Base. // 不论字段还是静态构造函数,派生类对象总是先于基类对象初始化.
- Except Instance Constructors. //对于实例构造函数,基类构造函数总是先于派生类的实例构造函数初始化.
- Don't Assume Field Order. //字段的初始化顺序总是按照他们在源文件的定义顺序执行的.
- Two-Phase for Virtual. //避免从构造函数中调用虚拟方法.