繼承類和基類的構造函數
阿新 • • 發佈:2019-01-12
分享圖片 ole new 語句塊 play bsp public 過程 style
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是兒子類。
多個層的繼承構造函數的執行過程
先到兒子類,進行傳參
再到爸爸類,傳參
接著到爺爺類。此時就開始執行初始化語句了。
接著執行爸爸類構造函數語句
再執行兒子類構造函數語句
繼承類和基類的構造函數