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;
        }
    }
}

 

posted @ 2019-07-20 14:38  liliyou  阅读(948)  评论(0编辑  收藏  举报