C#中基類和派生類的構(gòu)造函數(shù)以及變量的初始化執(zhí)行順序

說明

本文轉(zhuǎn)載自:C#中基類和派生類的構(gòu)造函數(shù)以及變量的執(zhí)行順序整理
為方便統(tǒng)一管理自己學(xué)習(xí)知識(shí)體系漂羊,所以將博文載入扼雏。

源碼

class Program
    {
        static void Main(string[] args)
        {
            B b = new B();
            Console.WriteLine(A.s_a);
            Console.WriteLine(B.s_b);
            Console.WriteLine(b.g_a);
            Console.WriteLine(b.g_a_1);
            Console.WriteLine(b.g_b);
            Console.ReadKey();
        }
    }
    //基類
    class A
    {
        //靜態(tài)變量
        public static string s_a = "A.s_a" + (C.index++).ToString("_00");
        //變量
        public string g_a = "A.g_a" + (C.index).ToString("_00");
        //為了顯示A.g_a
        public string g_a_1 = "A.g_a_1" + (C.index++).ToString("_00");

        //靜態(tài)構(gòu)造函數(shù)
        static A()
        {
            Console.WriteLine("It is in static A()" + (C.index++).ToString("_00"));
        }
        //構(gòu)造函數(shù)
        public A()
        {
            Console.WriteLine("It is in A()" + (C.index++).ToString("_00"));
            this.M();
        }
        //虛方法
        public virtual void M()
        {
            Console.WriteLine("It is in A.M()" + (C.index++).ToString("_00"));
        }
    }

    //派生類
    class B : A
    {
        //靜態(tài)變量
        public static string s_b = "B.s_b" + (C.index++).ToString("_00");
        //變量
        public string g_b = "B.g_b" + (C.index++).ToString("_00");

        //靜態(tài)構(gòu)造函數(shù)
        static B()
        {
            Console.WriteLine("It is in static B()" + (C.index++).ToString("_00"));
        }
        //構(gòu)造函數(shù)
        public B()
            : base()
        {
            Console.WriteLine("It is in B()" + (C.index++).ToString("_00"));
            g_a += "->B.g_a" + (C.index++).ToString("_00");
            this.M();
        }
        //重寫方法
        public override void M()
        {
            Console.WriteLine("It is in B.M()" + (C.index++).ToString("_00"));
            Console.WriteLine("B.g_a=" + g_a + (C.index++).ToString("_00"));
        }
    }
    class C
    {
        public static int index = 1;
    }

代碼執(zhí)行結(jié)果

It is in static B()_02
It is in static A()_05
It is in A()_07
It is in B.M()_08
B.g_a=A.g_a_06_09
It is in B()_10
It is in B.M()_12
B.g_a=A.g_a_06->B.g_a_11_13
A.s_a_04
B.s_b_01
A.g_a_06->B.g_a_11
A.g_a_1_06
B.g_b_03

對(duì)執(zhí)行結(jié)果重新排序

B.s_b_01
It is in static B()_02
B.g_b_03
A.s_a_04
It is in static A()_05
A.g_a_1_06
It is in A()_07
It is in B.M()_08
B.g_a=A.g_a_06_09
It is in B()_10
A.g_a_06->B.g_a_11
It is in B.M()_12
B.g_a=A.g_a_06->B.g_a_11_13

結(jié)論

當(dāng)實(shí)例化一個(gè)子類時(shí)跌前,父類以及子類的變量初始化和構(gòu)造函數(shù)的執(zhí)行順序如下:
1._01子類的靜態(tài)變量前计;
2._02子類的靜態(tài)構(gòu)造函數(shù);
3._03子類的變量刚盈;
4._04父類的靜態(tài)變量(此時(shí)因?yàn)橐獔?zhí)行子類的構(gòu)造函數(shù)汽久,會(huì)與父類發(fā)生關(guān)系)鹤竭;
5._05父類靜態(tài)構(gòu)造函數(shù);
6._06父類變量景醇;
7._07父類構(gòu)造函數(shù)诺擅;
8._10子類構(gòu)造函數(shù)。

在試驗(yàn)過程里面添加了幾個(gè)步驟主要說明子類重寫父類方法的調(diào)用情況:
1.在父類的構(gòu)造函數(shù)中調(diào)用(步驟08)啡直,此時(shí)調(diào)用子類的實(shí)現(xiàn)時(shí)烁涌,其中的變量g_a的值還是來自于父類(步驟09);
2.在調(diào)用子類的構(gòu)造函數(shù)后酒觅,變量g_a的值被重新設(shè)置(步驟11)撮执,此時(shí)調(diào)用子類的實(shí)現(xiàn)時(shí),變量值是子類構(gòu)造函數(shù)中設(shè)定的舷丹。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末抒钱,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子颜凯,更是在濱河造成了極大的恐慌谋币,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件症概,死亡現(xiàn)場(chǎng)離奇詭異蕾额,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)彼城,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門诅蝶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來退个,“玉大人,你說我怎么就攤上這事调炬∮镉” “怎么了?”我有些...
    開封第一講書人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵缰泡,是天一觀的道長刀荒。 經(jīng)常有香客問我,道長棘钞,這世上最難降的妖魔是什么照棋? 我笑而不...
    開封第一講書人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮武翎,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘溶锭。我一直安慰自己宝恶,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開白布趴捅。 她就那樣靜靜地躺著垫毙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪拱绑。 梳的紋絲不亂的頭發(fā)上综芥,一...
    開封第一講書人閱讀 51,679評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音猎拨,去河邊找鬼膀藐。 笑死,一個(gè)胖子當(dāng)著我的面吹牛红省,可吹牛的內(nèi)容都是我干的额各。 我是一名探鬼主播,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼吧恃,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼虾啦!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起痕寓,我...
    開封第一講書人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤傲醉,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后呻率,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體硬毕,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年礼仗,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了昭殉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片苞七。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖挪丢,靈堂內(nèi)的尸體忽然破棺而出蹂风,到底是詐尸還是另有隱情,我是刑警寧澤乾蓬,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布惠啄,位于F島的核電站,受9級(jí)特大地震影響任内,放射性物質(zhì)發(fā)生泄漏撵渡。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一死嗦、第九天 我趴在偏房一處隱蔽的房頂上張望趋距。 院中可真熱鬧,春花似錦越除、人聲如沸节腐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽翼雀。三九已至,卻和暖如春孩擂,著一層夾襖步出監(jiān)牢的瞬間狼渊,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來泰國打工类垦, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留狈邑,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓蚤认,卻偏偏與公主長得像官地,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子烙懦,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容