C#中派生類調(diào)用基類構(gòu)造函數(shù)用法分析
本文實例講述了C#中派生類調(diào)用基類構(gòu)造函數(shù)用法。分享給大家供大家參考。具體分析如下:
這里的默認構(gòu)造函數(shù)是指在沒有編寫構(gòu)造函數(shù)的情況下系統(tǒng)默認的無參構(gòu)造函數(shù)
1、當基類中沒有自己編寫構(gòu)造函數(shù)時,派生類默認的調(diào)用基類的默認構(gòu)造函數(shù)
例如:
public class MyBaseClass { } public class MyDerivedClass : MyBaseClass { public MyDerivedClass() { Console.WriteLine("我是子類無參構(gòu)造函數(shù)"); } public MyDerivedClass(int i) { Console.WriteLine("我是子類帶一個參數(shù)的構(gòu)造函數(shù)"); } public MyDerivedClass(int i, int j) { Console.WriteLine("我是子類帶二個參數(shù)的構(gòu)造函數(shù)"); } }
此時實例化派生類時,調(diào)用基類默認構(gòu)造函數(shù)
2、當基類中編寫構(gòu)造函數(shù)時,派生類沒有指定調(diào)用構(gòu)造哪個構(gòu)造函數(shù)時,會尋找無參的構(gòu)造函數(shù),如果沒有則報錯,另外無論調(diào)用派生類中的哪個構(gòu)造函數(shù)都是尋找無參的那個基類構(gòu)造函數(shù),而非參數(shù)匹配。
例如:
public class MyBaseClass { public MyBaseClass(int i) { Console.WriteLine("我是基類帶一個參數(shù)的構(gòu)造函數(shù)"); } } public class MyDerivedClass : MyBaseClass { public MyDerivedClass() { Console.WriteLine("我是子類無參構(gòu)造函數(shù)"); } public MyDerivedClass(int i) { Console.WriteLine("我是子類帶一個參數(shù)的構(gòu)造函數(shù)"); } public MyDerivedClass(int i, int j) { Console.WriteLine("我是子類帶二個參數(shù)的構(gòu)造函數(shù)"); } }
此時實例化派生類時則報錯
3、基類中編寫了構(gòu)造函數(shù),則派生類中可以指定調(diào)用基類的某個構(gòu)造函數(shù),使用base關(guān)鍵字。
例如
public class MyBaseClass { public MyBaseClass(int i) { Console.WriteLine("我是基類帶一個參數(shù)的構(gòu)造函數(shù)"); } } public class MyDerivedClass : MyBaseClass { public MyDerivedClass() : base(i) { Console.WriteLine("我是子類無參構(gòu)造函數(shù)"); } public MyDerivedClass(int i) : base(i) { Console.WriteLine("我是子類帶一個參數(shù)的構(gòu)造函數(shù)"); } public MyDerivedClass(int i, int j) : base(i) { Console.WriteLine("我是子類帶二個參數(shù)的構(gòu)造函數(shù)"); } }
此時實例化派生類時使用的帶一個參數(shù)的構(gòu)造函數(shù)時,則不會報錯,因為他指定了基類的構(gòu)造函數(shù)。
4、如果基類中的構(gòu)造函數(shù)不含有無參構(gòu)造函數(shù),那么派生類中的構(gòu)造函數(shù)必須全部指定調(diào)用的基類構(gòu)造函數(shù),否則出錯
例如
public class MyBaseClass { public MyBaseClass(int i) { Console.WriteLine("我是基類帶一個參數(shù)的構(gòu)造函數(shù)"); } } public class MyDerivedClass : MyBaseClass { public MyDerivedClass() { Console.WriteLine("我是子類無參構(gòu)造函數(shù)"); } public MyDerivedClass(int i) : base(i) { Console.WriteLine("我是子類帶一個參數(shù)的構(gòu)造函數(shù)"); } public MyDerivedClass(int i, int j) { Console.WriteLine("我是子類帶二個參數(shù)的構(gòu)造函數(shù)"); } }
此時編譯將不能通過
希望本文所述對大家的C#程序設(shè)計有所幫助。
相關(guān)文章
C#中實現(xiàn)PriorityQueue優(yōu)先級隊列的代碼
這篇文章主要介紹了C#中PriorityQueue優(yōu)先級隊列的實現(xiàn),構(gòu)造初始化這部分主要介紹關(guān)鍵的字段和方法,比較器的初始化以及堆的初始化,需要的朋友可以參考下2021-12-12C#使用IComparer自定義List類實現(xiàn)排序的方法
這篇文章主要介紹了C#使用IComparer自定義List類實現(xiàn)排序的方法,涉及C#使用IComparer接口定義List類進行排序的相關(guān)技巧,需要的朋友可以參考下2015-08-08C#構(gòu)造函數(shù)在基類和父類中的執(zhí)行順序
這篇文章介紹了C#構(gòu)造函數(shù)在基類和父類中的執(zhí)行順序,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-04-04