今天去面試的時候被一道題問得一點脾氣都沒有,今天特地來研究下。
子類成員變量,子類靜態成員變量,子類構造函數,父類成員變量,父類靜態成員變量,父類構造函數的執行順序。
現在貼上從另外一個.net程序員寫的實例,稍微改下。
public class ShowInfo { public ShowInfo(string info) { Console.WriteLine(info); } } class father { public static ShowInfo StaticFatherMember = new ShowInfo("父類靜態成員變量執行"); //父類靜態成員變量 public ShowInfo InstanceFatherMember = new ShowInfo("父類實例成員變量執行"); //父類實例成員變量 static father() //父類構造函數 { ShowInfo StaticFatherMethod = new ShowInfo("父類靜態構造函數執行"); //父類靜態構造函數 } public father() { ShowInfo bcsI = new ShowInfo("父類實例構造函數執行"); } } class son : father { public static ShowInfo StaticSonMember = new ShowInfo("子類靜態成員變量執行"); public ShowInfo InstanceStaticSonMember = new ShowInfo("子類實例成員變量執行"); static son() { ShowInfo StaticSonMethod = new ShowInfo("子類靜態構造函數執行"); } public son() { ShowInfo InstanceSonMethod = new ShowInfo("子類實例構造函數執行"); } } class Program { static void Main(string[] args) { //各個對象的初始化順序如下: //①子類靜態成員變量 //②子類靜態構造函數 //③子類實例成員變量 //④父類靜態成員變量 //⑤父類靜態構造函數 //⑥父類實例成員變量 //⑦父類構造函數 //⑧子類構造函數 son s = new son(); Console.ReadKey(); } }
來看看最后的輸出結果:
1子類靜態成員變量 2子類靜態構造函數 3子類實例成員變量 4父類靜態成員變量 5父類靜態構造函數 6父類實例成員變量 7父類構造函數 8子類構造函數
看來除了構造函數,子類全部比父類先執行,其順序是靜態先於實例,變量先於函數。然后子父類實例函數都是最后執行。