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
基類建構函數呼叫 Virtual() 時,派生類建構函數尚未執行,派生類欄位 Field3 仍未初始化。輸出顯示 Derived.Instance.Virtual 在 Derived.Instance.Field3 之前!
class Base {
public Base() { Virtual(); } // 危險!
virtual public void Virtual() { Console.WriteLine("Base"); }
}
class Derived : Base {
private Tracker field3 = new Tracker("Derived.Field3");
override public void Virtual() {
Console.WriteLine(field3); // NullReferenceException 風險
}
}
// 階段 1:建構物件
Derived d = new Derived();
// 階段 2:初始化邏輯 (安全呼叫虛方法)
d.Virtual(); // 此時 Derived 完全初始化完成