C#構造函數及其的結構層次關系說明
一、C#構造函數 Construct,Function
構造函數是一種特殊的成員函數,它主要用于為對象分配存儲空間,對數據成員進行初始化.
構造函數具有一些特殊的性質:
(1)構造函數的名字必須與類同名;
(2)構造函數沒有返回類型,它可以帶參數,也可以不帶參數;
(3)聲明類對象時,系統自動調用構造函數,構造函數不能被顯式調用;
(4)構造函數可以重載,從而提供初始化類對象的不同方法;
(5)若在聲明時未定義構造函數,系統會自動生成默認的構造函數,此時構造函數的函數體為空.
(6)靜態構造函數,用static修飾,用于初始化靜態變量,一個類只允許有一個構造函數,在類實例化時加載,這時修飾符public、private失去作用.
(7)可以使用public、protected、private修飾符。.
(8)引用父類構造時用():base()方法,引用自身重載的構造使用():this(int para).
(7)可以使用public、protected、private修飾符。
二、C#構造函數的結構層次關系或者說執行順序是怎樣的?Layer,Transfer,Execute
從基類開始構造對象。
- publicclassMyBaseClass
- {
- publicMyBaseClass()
- {
- Console.WriteLine("InMyBaseClass()");
- }
- publicMyBaseClass(inti)
- {
- Console.WriteLine("InMyBaseClass(inti)");
- }
- }
- publicclassMyDerivedClass:MyBaseClass
- {
- publicMyDerivedClass()
- {
- Console.WriteLine("InMyDerivedClass()");
- }
- publicMyDerivedClass(inti)
- {
- Console.WriteLine("InMyDerivedClass(inti)");
- }
- //publicMyDerivedClass(inti,intj)
- //{
- //Console.WriteLine("InMyDerivedClass(inti,intj)");
- //}
- publicMyDerivedClass(inti,intj)
- :base(i)
- {
- Console.WriteLine("InMyDerivedClass(inti,intj):base(i)");
- }
- }
- classProgram
- {
- staticvoidMain(string[]args)
- {
- //Event1
- MyDerivedClassmyObj1=newMyDerivedClass();
- Console.WriteLine();
- //Event2
- MyDerivedClassmyObj2=newMyDerivedClass(4);
- Console.WriteLine();
- //Event3
- MyDerivedClassmyObj3=newMyDerivedClass(4,8);
- Console.WriteLine();
- Console.ReadKey();
- }
- }
- 程序輸出:
- InMyBaseClass()
- InMyDerivedClass()
- InMyBaseClass()
- InMyDerivedClass(inti)
- InMyBaseClass(inti)
- InMyDerivedClass(inti,intj):base(i)
很明顯,只有在用base顯示調用父類的構造函數時,程序才不會默認的調用不帶參數的構造函數。
【編輯推薦】