繼承類和基類的建構函式
阿新 • • 發佈:2019-01-11
1.類的預設建構函式
1 public class BaseClass 2 { 3 public BaseClass() 4 { 5 // 6 } 7 } 8
2.派生類建構函式
預設建構函式
1 //基類(父類) 2 public class BaseClass 3 { 4 public BaseClass() 5 { 6 // 7 } 8} 9 //繼承類(子類) 10 public class inheritanceClass:BaseClass 11 { 12 public inheritanceClass() 13 { 14 // 15 } 16 }
通過VS斷點檢視執行過程。
先是到
inheritanceClass建構函式,此時並不進入花括號裡的語句(因為沒有引數,所以不需要進行傳引數給父類)->接著執行BaseClass建構函式的語句塊->再執行inheritanceClasss建構函式的語句塊
帶引數的建構函式
派生類建構函式的引數個數和型別要和父類一致
派生類(型別 引數):base(引數)
1 //基類(父類) 2 public class BaseClass 3 { 4 string A; 5 public BaseClass(string a) 6 { 7 A = a; 8 } 9 } 10 //繼承類(子類) 11 public class inheritanceClass:BaseClass 12 { 13 public inheritanceClass(string w):base(w) 14 {15 // 16 } 17 }
斷點執行過程和預設建構函式是一樣的。
inheritanceClass建構函式,進行引數傳遞,不進入語句塊->接著執行BaseClass建構函式語句塊->再執行inheritanceClasss建構函式語句塊。
多個層的繼承
public class GradeFatherClass { //爺爺類 private string B; public GradeFatherClass(string b) { B = b; } public void Display(string show) { Console.WriteLine("爺爺:{0}", show); } } //基類(父類) public class BaseClass : GradeFatherClass { string A; public BaseClass(string a):base(a) { A = a; } public void Display() { Console.WriteLine("爸爸:{0}",A); } } //繼承類(子類) public class inheritanceClass:BaseClass { private string W; public inheritanceClass(string w):base(w) { W = w; } public new void Display() { Console.WriteLine("我:{0}", W); } }
GradeFatherClass為第一個父類,BaseClass 是GradeFatherClass的子類.
inheritanceClass又是BaseClass的子類.
所以,GradeFatherClass是爺爺類,BaseClass是爸爸類,inheritanceClass是兒子類。
多個層的繼承建構函式的執行過程
先到兒子類,進行傳參
再到爸爸類,傳參
接著到爺爺類。此時就開始執行初始化語句了。
接著執行爸爸類建構函式語句
再執行兒子類建構函式語句