c#構造初使化的順序

娃哈哈ABC發表於2013-08-23

這個很基礎的知識,但我至今才意識到它。想想也很失敗。

直接上程式碼:很簡單

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();

    }

所以說它的執行順序為:子類欄位-父類欄位-父類構造器-子類構造器

 

相關文章