C#構(gòu)造函數(shù)及其的結(jié)構(gòu)層次關(guān)系說明
一、C#構(gòu)造函數(shù) Construct,Function
構(gòu)造函數(shù)是一種特殊的成員函數(shù),它主要用于為對象分配存儲空間,對數(shù)據(jù)成員進行初始化.
構(gòu)造函數(shù)具有一些特殊的性質(zhì):
(1)構(gòu)造函數(shù)的名字必須與類同名;
(2)構(gòu)造函數(shù)沒有返回類型,它可以帶參數(shù),也可以不帶參數(shù);
(3)聲明類對象時,系統(tǒng)自動調(diào)用構(gòu)造函數(shù),構(gòu)造函數(shù)不能被顯式調(diào)用;
(4)構(gòu)造函數(shù)可以重載,從而提供初始化類對象的不同方法;
(5)若在聲明時未定義構(gòu)造函數(shù),系統(tǒng)會自動生成默認(rèn)的構(gòu)造函數(shù),此時構(gòu)造函數(shù)的函數(shù)體為空.
(6)靜態(tài)構(gòu)造函數(shù),用static修飾,用于初始化靜態(tài)變量,一個類只允許有一個構(gòu)造函數(shù),在類實例化時加載,這時修飾符public、private失去作用.
(7)可以使用public、protected、private修飾符。.
(8)引用父類構(gòu)造時用():base()方法,引用自身重載的構(gòu)造使用():this(int para).
(7)可以使用public、protected、private修飾符。
二、C#構(gòu)造函數(shù)的結(jié)構(gòu)層次關(guān)系或者說執(zhí)行順序是怎樣的?Layer,Transfer,Execute
從基類開始構(gòu)造對象。
- 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顯示調(diào)用父類的構(gòu)造函數(shù)時,程序才不會默認(rèn)的調(diào)用不帶參數(shù)的構(gòu)造函數(shù)。
【編輯推薦】