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