C# 基類派生類構造函數執行順序分析


using System;

namespace ConsoleApp1
{
    class Program{
        static void Main(string[] args){
            B b = new B();
        }
    }
    class A{
        public A(){
            Console.WriteLine("基類的構造函數初始化!");
        }

    }
    class B:A{
        public B(){
            Console.WriteLine("派生類構造函數初始化!");
        }
    }
}

輸出:

分析:

 1.先根據層次鏈找到最頂層的基類,先調用基類構造函數,再依次調用各級派生類構造函數,

 2.派生類會隱式地調用父類構造函數

顯示調用父類構造函數:

using System;

namespace ConsoleApp1
{
    class Program{
        static void Main(string[] args){
            B b = new B();
        }
    }
    class A{
        public A(){
            Console.WriteLine("基類的構造函數初始化!");
        }

    }
    class B:A{
        public B():base(){
            Console.WriteLine("派生類構造函數初始化!");
        }
    }
}

 析構函數則與構造函數相反

 

派生類沒有構造函數則隱式調用基類無參構造函數:

using System;

namespace ConsoleApp1
{
    class Program{
        static void Main(string[] args){
            B b = new B();
            Console.WriteLine(b.getNum());
        }
    }
    class A{
        public int a{get;set;}
        public A(){
            Console.WriteLine("基類的構造函數初始化!");
            this.a=10;
        }

    }
    class B:A{
        //public B(){
        //    Console.WriteLine("派生類構造函數初始化!");
        //}
        public int getNum(){
            return this.a;
        }
    }
}

 


免責聲明!

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



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