1. 程式人生 > >繼承類和基類的構造函數

繼承類和基類的構造函數

分享圖片 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是兒子類。

多個層的繼承構造函數的執行過程

先到兒子類,進行傳參

技術分享圖片

再到爸爸類,傳參

技術分享圖片

接著到爺爺類。此時就開始執行初始化語句了。

技術分享圖片

技術分享圖片

接著執行爸爸類構造函數語句

技術分享圖片

再執行兒子類構造函數語句

技術分享圖片

繼承類和基類的構造函數