標籤:lin toolbar dex .net int 情況 tool 預設 art
這裡的預設建構函式是指在沒有編寫建構函式的情況下系統預設的無參建構函式
1、當基類中沒有自己編寫建構函式時,衍生類別預設的調用基類的預設建構函式
例如:
?
| 123456789101112131415161718 |
public class MyBaseClass{}public class MyDerivedClass : MyBaseClass{ public MyDerivedClass() { Console.WriteLine("我是子類無參建構函式"); } public MyDerivedClass(int i) { Console.WriteLine("我是子類帶一個參數的建構函式"); } public MyDerivedClass(int i, int j) { Console.WriteLine("我是子類帶二個參數的建構函式"); }} |
此時執行個體化衍生類別時,調用基類預設建構函式
2、當基類中編寫建構函式時,衍生類別沒有指定調用構造哪個建構函式時,會尋找無參的建構函式,如果沒有則報錯,另外無論調用衍生類別中的哪個建構函式都是尋找無參的那個基類建構函式,而非參數匹配。
例如:
?
| 12345678910111213141516171819202122 |
public class MyBaseClass{ public MyBaseClass(int i) { Console.WriteLine("我是基類帶一個參數的建構函式"); } } public class MyDerivedClass : MyBaseClass { public MyDerivedClass() { Console.WriteLine("我是子類無參建構函式"); } public MyDerivedClass(int i) { Console.WriteLine("我是子類帶一個參數的建構函式"); } public MyDerivedClass(int i, int j) { Console.WriteLine("我是子類帶二個參數的建構函式"); }} |
此時執行個體化衍生類別時則報錯
3、基類中編寫了建構函式,則衍生類別中可以指定調用基類的某個建構函式,使用base關鍵字。
例如
?
| 12345678910111213141516171819202122 |
public class MyBaseClass{ public MyBaseClass(int i) { Console.WriteLine("我是基類帶一個參數的建構函式"); }}public class MyDerivedClass : MyBaseClass{ public MyDerivedClass() : base(i) { Console.WriteLine("我是子類無參建構函式"); } public MyDerivedClass(int i) : base(i) { Console.WriteLine("我是子類帶一個參數的建構函式"); } public MyDerivedClass(int i, int j) : base(i) { Console.WriteLine("我是子類帶二個參數的建構函式"); }} |
此時執行個體化衍生類別時使用的帶一個參數的建構函式時,則不會報錯,因為他指定了基類的建構函式。
4、如果基類中的建構函式不含有無參建構函式,那麼衍生類別中的建構函式必須全部指定調用的基類建構函式,否則出錯
例如
?
| 12345678910111213141516171819202122 |
public class MyBaseClass { public MyBaseClass(int i) { Console.WriteLine("我是基類帶一個參數的建構函式"); } } public class MyDerivedClass : MyBaseClass { public MyDerivedClass() { Console.WriteLine("我是子類無參建構函式"); } public MyDerivedClass(int i) : base(i) { Console.WriteLine("我是子類帶一個參數的建構函式"); } public MyDerivedClass(int i, int j) { Console.WriteLine("我是子類帶二個參數的建構函式"); }} |
此時編譯將不能通過
希望本文所述對大家的C#程式設計有所協助。
C#中衍生類別調用基類建構函式用法分析