欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C#構(gòu)造函數(shù)在基類和父類中的執(zhí)行順序

 更新時(shí)間:2022年04月18日 13:56:36   作者:農(nóng)碼一生  
這篇文章介紹了C#構(gòu)造函數(shù)在基類和父類中的執(zhí)行順序,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

一、簡介

當(dāng)我們沒有在子類構(gòu)造函數(shù)中寫上 base(),默認(rèn)會(huì)先調(diào)用父類中無參的構(gòu)造函數(shù),再調(diào)用子類。
當(dāng)在有參構(gòu)造函數(shù)后寫上base時(shí),只調(diào)用子類構(gòu)造函數(shù)中有參的構(gòu)造函數(shù),隱藏父類無參構(gòu)造函數(shù)。

二、代碼案例

父類代碼:

#region 父類

    /// <summary>
    /// 測試構(gòu)造函數(shù)——需要被構(gòu)造類 Fu
    /// </summary>
    class Fu
    {
        private int x;//一個(gè)簡單的私有字段
        /// <summary>
        /// 構(gòu)造函數(shù)
        /// </summary>
        public Fu()
        {
            Console.WriteLine("會(huì)先調(diào)用這里:這是父類");
        }

        /// <summary>
        /// 父類中的有參構(gòu)造方法
        /// </summary>
        /// <param name="x"></param>
        public Fu(int x)
        {
            this.x = x;
            Console.WriteLine("x賦值完成");
        }

        /// <summary>
        /// 父類構(gòu)造C函數(shù)
        /// </summary>
        /// <param name="x"></param>
        /// <param name="b"></param>
        /// <param name="c"></param>
        public Fu(int x, int b, string c)
        {
            this.x = x;
            Console.WriteLine("x賦值完成" + x + b + c);
        }


        /// <summary>
        /// 具有7個(gè)參數(shù)的構(gòu)造函數(shù)
        /// </summary>
        /// <param name="a"></param>
        /// <param name="a1"></param>
        /// <param name="a2"></param>
        /// <param name="a3"></param>
        /// <param name="a4"></param>
        /// <param name="a6"></param>
        /// <param name="a5"></param>
        public Fu(int a, int a1, int a2, int a3, int a4, int a6, int a5)
        {
            Console.WriteLine("最長參數(shù)構(gòu)造運(yùn)行");
            Console.WriteLine(a + "|" + a1 + "|" + a2 + "|" + a3 + "|" + a4 + "|" + a5 + "|" + a6 + "|"); //在函數(shù)中讓傳入?yún)?shù)對(duì)Fu類對(duì)象進(jìn)行初始化
            //例如有如下多個(gè)私有字段,在類對(duì)象初始化的時(shí)候,對(duì)其變量初始化。用構(gòu)造函數(shù)最為簡單
            this.a = a; //傳入?yún)?shù),在對(duì)象實(shí)例化后,對(duì)其私有變量進(jìn)行賦值操作
            this.a1 = a;
            this.a2 = a;
            this.a3 = a;
            this.a4 = a;
            this.a5 = a;
            this.a6 = a;
        }


        private int a;
        private int a1;
        private int a2;
        private int a3;
        private int a4;
        private int a5;
        private int a6;
    }
    #endregion

子類代碼:

#region 子類

    /// <summary>
    /// 派生類繼承父類
    /// </summary>
    class Derived : Fu
    {
        /// <summary>
        /// 會(huì)先調(diào)用父類的構(gòu)造函數(shù),然后再調(diào)用子類這邊的有參構(gòu)造函數(shù)
        /// </summary>

        //先調(diào)用父類無參,再調(diào)用子類無參
        //當(dāng)我們沒有在子類構(gòu)造函數(shù)中寫上 base(),默認(rèn)會(huì)先調(diào)用父類中無參的構(gòu)造函數(shù),再調(diào)用子類。

        public Derived() //: base() //重新構(gòu)造 :調(diào)用父類中無參的構(gòu)造函數(shù),在這里寫不寫調(diào)用結(jié)果一致
        {
            Console.WriteLine("這是派生類-無參-構(gòu)造函數(shù)");
        }


        private int y;


        /// <summary>
        /// 構(gòu)造函數(shù)
        /// </summary>
        /// <param name="x"></param>
        /// <param name="y"></param>
        /// 當(dāng)我們沒有在子類構(gòu)造函數(shù)中 寫上 base(),默認(rèn)會(huì)先調(diào)用父類中無參的構(gòu)造函數(shù)
        /// 當(dāng)在有參構(gòu)造函數(shù)后寫上base時(shí),只調(diào)用子類構(gòu)造函數(shù)中有參的構(gòu)造函數(shù),隱藏父類無參構(gòu)造函數(shù)
        public Derived(int x, int y) /*: base(x)*/
        {
            this.y = y;
            Console.WriteLine("這是y賦值完成");
        }


        /// <summary>
        /// 多參數(shù)
        /// </summary>
        /// <param name="x"></param>
        /// <param name="a"></param>
        public Derived(int x, string a)// : base(x, x, x, x, x, x, x) //這里寫了 base 會(huì)先調(diào)用父類,再調(diào)用當(dāng)前子類進(jìn)行構(gòu)造
        {
            y = x;
            Console.WriteLine(a + "第三方法");
        }
    }

    #endregion

Main()調(diào)用:

#region Main 入口
    /// <summary>
    /// 程序
    /// </summary>
    class Program
    {
        /// <summary>
        /// 主入口
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            Derived d = new Derived();
            Console.WriteLine("-----------------------以上為無參構(gòu)造------------------------------------------");
            Derived d1 = new Derived(1, 2);
            Console.WriteLine("-----------------------以上為2個(gè)參數(shù)構(gòu)造---------------------------------------");
            Derived d2 = new Derived(1, "1");
            Console.WriteLine("-----------------------以上為2個(gè)參數(shù)構(gòu)造,6個(gè)私變量----------------------------");

            //先調(diào)用有參的構(gòu)造函數(shù)一旦被調(diào)用,無參的構(gòu)造函數(shù)都不會(huì)被調(diào)用了
            //先執(zhí)行父類的構(gòu)造函數(shù),才執(zhí)行子類的
            Console.ReadLine();
        }
    }
    #endregion

三、輸出結(jié)果

會(huì)先調(diào)用這里:這是父類
這是派生類-無參-構(gòu)造函數(shù)
-----------------------以上為無參構(gòu)造------------------------------------------
會(huì)先調(diào)用這里:這是父類
這是y賦值完成
-----------------------以上為2個(gè)參數(shù)構(gòu)造---------------------------------------
最長參數(shù)構(gòu)造運(yùn)行
1|1|1|1|1|1|1|
1第三方法
-----------------------以上為2個(gè)參數(shù)構(gòu)造,6個(gè)私變量----------------------------

到此這篇關(guān)于C#構(gòu)造函數(shù)在基類和父類中執(zhí)行順序的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論