C#建構函式的執行順序

來源:互聯網
上載者:User

標籤:c#建構函式的執行順序

<1>

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace 建構函式的執行順序{    public class MyBaseClass    {        public MyBaseClass()        {            Console.Write("調用父類無參數的建構函式");        }        public MyBaseClass(int i)        {            Console.Write("調用父類一個參數的建構函式");        }    }    public class MyDerivedClass : MyBaseClass    {        public int age;        public static int age2;//只要類裡存在靜態變數。那麼靜態變數總是最先初始化的。        static MyDerivedClass() //既然要初始化靜態變數,就要調用靜態建構函式。        {            age2 = 100;            Console.Write(age2);        }        public MyDerivedClass():this(5)        {            age = 101;            Console.WriteLine(age);        }        public MyDerivedClass(int i)        {            age = 102;            Console.WriteLine(age);        }        public MyDerivedClass(int i, int j)        {            Console.WriteLine("兩個變數的參數");        }    }    class Program    {        static void Main(string[] args)        {            MyDerivedClass myder = new MyDerivedClass(); //輸出100 ,"調用父類無參數的建構函式",101            //執行順序:<1>: static MyDerivedClass() <2>: public MyBaseClass() <3>:public MyDerivedClass()            //---------------------------------------------------------------------------------------------            MyDerivedClass myder2 = new MyDerivedClass(5); //輸出"調用父類無參數的建構函式",102。            //在初始化myder對象的時候已經初始化過靜態變數age2了。因為靜態建構函式最多執行一次,所以初始化myder2對象的時候就不會在繼續初始化靜態變數age2了            //執行順序:<1>: public MyBaseClass() <2>: public MyDerivedClass(int i)                        //假如我想在初始化myder2對象的時候調用父類帶有一個參數的建構函式怎麼辦呢?很好辦只要在衍生類別的建構函式後面加一個:base(i)            /*     base 關鍵字用於從衍生類別中訪問基類的成員;指定建立衍生類別執行個體時應調用的基類建構函式。                                  public MyDerivedClass(int i):base(i)                     {                        age = 102;                        Console.WriteLine(age);                     }                                        執行順序:<1>: public MyBaseClass(int i) <2>: public MyDerivedClass(int i)                    顧這裡輸出的是 "調用父類一個參數的建構函式",102             */            //---------------------------------------------------------------------------------------------            MyDerivedClass myder3 = new MyDerivedClass(5, 6); //輸出"調用父類無參數的建構函式","兩個變數的參數"            //執行順序:<1>: public MyBaseClass() <2>: public MyDerivedClass(int i, int j)            Console.ReadKey();        }    }}

<2>

using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace 建構函式的執行順序{    public class MyBaseClass    {        public MyBaseClass()        {            Console.Write("調用父類無參數的建構函式");        }        public MyBaseClass(int x)        {            Console.Write("調用父類一個參數的建構函式");        }    }    public class MyDerivedClass : MyBaseClass    {        public int age;        public static int age2;//只要類裡存在靜態變數。那麼靜態變數總是最先初始化的。        static MyDerivedClass() //既然要初始化靜態變數,就要調用靜態建構函式。        {            age2 = 100;            Console.Write(age2);        }        public MyDerivedClass():this(5)        {            age = 101;            Console.WriteLine(age);        }        public MyDerivedClass(int i):base(i)        {            age = 102;            Console.WriteLine(age);        }        public MyDerivedClass(int i, int j)        {            Console.WriteLine("兩個變數的參數");        }    }    class Program    {        static void Main(string[] args)        {            MyDerivedClass myder = new MyDerivedClass(); //輸出100 ,"調用父類一個參數的建構函式",102,101            //執行順序:<1>: static MyDerivedClass() <2>:  public MyBaseClass(int x) <3>:public MyDerivedClass(int i) <4>:public MyDerivedClass()            //---------------------------------------------------------------------------------------------            //MyDerivedClass myder2 = new MyDerivedClass(5); //輸出"調用父類無參數的建構函式",102。            //在初始化myder對象的時候已經初始化過靜態變數age2了。因為靜態建構函式最多執行一次,所以初始化myder2對象的時候就不會在繼續初始化靜態變數age2了            //執行順序:<1>: public MyBaseClass() <2>: public MyDerivedClass(int i)                        //假如我想在初始化myder2對象的時候調用父類帶有一個參數的建構函式怎麼辦呢?很好辦只要在衍生類別的構造-+函數後面加一個:base(i)            /*     base 關鍵字用於從衍生類別中訪問基類的成員;指定建立衍生類別執行個體時應調用的基類建構函式。                                  public MyDerivedClass(int i):base(i)                     {                        age = 102;                        Console.WriteLine(age);                     }                                        執行順序:<1>: public MyBaseClass(int i) <2>: public MyDerivedClass(int i)                    顧這裡輸出的是 "調用父類一個參數的建構函式",102             */            //---------------------------------------------------------------------------------------------            //MyDerivedClass myder3 = new MyDerivedClass(5, 6); //輸出"調用父類無參數的建構函式","兩個變數的參數"            //執行順序:<1>: public MyBaseClass() <2>: public MyDerivedClass(int i, int j)            Console.ReadKey();        }    }}


C#建構函式的執行順序

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.