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