父子類,實例、靜態成員變量,構造函數的執行順序


  今天去面試的時候被一道題問得一點脾氣都沒有,今天特地來研究下。

  子類成員變量,子類靜態成員變量,子類構造函數,父類成員變量,父類靜態成員變量,父類構造函數的執行順序。

  現在貼上從另外一個.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子類構造函數  

看來除了構造函數,子類全部比父類先執行,其順序是靜態先於實例,變量先於函數。然后子父類實例函數都是最后執行。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM