這個很基礎的知識,但我至今才意識到它。想想也很失敗。
直接上程式碼:很簡單
public class Base { int i=0; public Base() { System.Console.WriteLine("我是基類構造器"); } } class Program { static void Main(string[] args) { Base d = new Base(); } }
對於上面的程式碼。是先執行構造器,還是先初使化欄位 i 變數呢?其實只要意識到這個問題,也就很容易試出來,它應當是先初使化欄位 i 變數。
那麼現在如果Base 派生出一個子類,那它的構造順序又是怎麼樣的呢?
/// <summary> /// 基類 /// </summary> public class Base { public int baseint = 100; public Base() { System.Console.WriteLine("構造器:我是基類構造器"); } private class Inner { public Inner() { System.Console.WriteLine("欄位:我是基類Inner"); } } /// <summary> /// 欄位初使化 /// </summary> private Inner inner = new Inner(); } /// <summary> /// 子類 /// </summary> class Derived : Base { public Derived() { System.Console.WriteLine("構造器:我是子類構造器"); } private class Inner { public Inner() { System.Console.WriteLine("欄位:我是子類Inner"); } } /// <summary> /// 欄位初使化 /// </summary> private Inner inner = new Inner(); }
所以說它的執行順序為:子類欄位-父類欄位-父類構造器-子類構造器