一、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修飾符。
注意:
1、定義了一個帶參建構函式後,最好定義一個無參建構函式,這樣可以避免子類調用時出錯
2、調用基類建構函式:base() 或 :base(參數列表) 調用本類其它建構函式 :this() 或 :this(參數列表)
3、只有在用base顯示調用父類的建構函式時,程式才不會預設的調用不帶參數的建構函式。
二、C#建構函式的結構層次關係或者說執行順序是怎樣的?Layer,Transfer,Execute
從基類開始構造對象。
public class MyBaseClass
{
public MyBaseClass()
{
Console.WriteLine("In MyBaseClass()");
}
public MyBaseClass(int i)
{
Console.WriteLine("In MyBaseClass(int i)");
}
}
public class MyDerivedClass : MyBaseClass
{
public MyDerivedClass()
{
Console.WriteLine("In MyDerivedClass()");
}
public MyDerivedClass(int i)
{
Console.WriteLine("In MyDerivedClass(int i)");
}
//public MyDerivedClass(int i, int j)
//{
// Console.WriteLine("In MyDerivedClass(int i,int j)");
//}
public MyDerivedClass(int i, int j)
: base(i)
{
Console.WriteLine("In MyDerivedClass(int i,int j):base(i)");
}
}
class Program
{
static void Main(string[] args)
{
//Event1
MyDerivedClass myObj1 = new MyDerivedClass();
Console.WriteLine();
//Event2
MyDerivedClass myObj2 = new MyDerivedClass(4);
Console.WriteLine();
//Event3
MyDerivedClass myObj3 = new MyDerivedClass(4,8);
Console.WriteLine();
Console.ReadKey();
}
}
程式輸出:
In MyBaseClass()
In MyDerivedClass()
In MyBaseClass()
In MyDerivedClass(int i)
In MyBaseClass(int i)
In MyDerivedClass(int i,int j):base(i)
很明顯,只有在用base顯示調用父類的建構函式時,程式才不會預設的調用不帶參數的建構函式。
http://junmail.javaeye.com/blog/197089