轉載自 http://blog.csdn.net/gshgsh1228/article/details/50867274函數
全部的類都至少包含一個構造函數。這些構造函數中可能有一個默認的構造函數,默認的構造函數沒有參數,與類同名。其它帶參數的構造函數稱爲非默認的構造函數。this
在類的外部不能用私有的構造函數實例化對象,經過把默認的構造函數設置爲私有,就能夠強制類的用戶使用非默認的構造函數。spa
一些類沒有公共的構造函數,外部代碼就不能實例化它。.net
靜態成員,也稱爲共享成員,能夠在類的實例之間共享。靜態成員經過類直接引用。對象
一個類只能有一個靜態的構造函數,該構造函數不能有訪問修飾符,也不能帶任何參數。靜態構造函數不能直接調用,只能在下述狀況下執行:blog
(1)建立包含靜態構造函數的類的實例時class
(2)訪問包含靜態構造函數的類的靜態成員時配置
非靜態構造函數也稱實例構造函數。構造函數
靜態類只包含靜態成員,且不能用於實例化對象(如Console)。引用
任何構造函數均可以配置爲在執行本身的代碼前調用其餘構造函數。
建立類的實例時,會調用類的構造函數,爲了實例化派生的類,必須實例化它的基類;要實例化這個基類,有必須實例化這個基類的基類,這樣一直實例化System.Object(全部類的根),所以不管使用什麼構造函數實例化一個類,老是首先調用System.Object.Object().
下面用例子說明構造函數的執行順序:
publicclass MyBaseClass
{
Public MyBaseClass()
{
}
Public MyBaseClass(int i)
{
}
}
publicclass MyDerivedClass:MyBaseClass
{
public MyDerivedClass()
{
}
public MyDerivedClass(int i)
{
}
public MyDerivedClass(int i,int j)
{
}
}
使用下面語句實例化MyDerivedClass
MyDerivedClass myObj=new MyDerivedClass();
構造函數執行順序以下:
(1)執行System.Object.Object()
(2)執行MyBaseClass.MyBaseClass()
(3)執行MyDerivedClass.MyDerivedClass()
另外,使用下面語句實例化MyDerivedClass
MyDerivedClass myObj=newMyDerivedClass(4,8);
構造函數執行順序以下:
(1)執行System.Object.Object()
(2)執行MyBaseClass.MyBaseClass()
(3)執行MyDerivedClass.MyDerivedClass(int i,int j)
若是咱們想要獲得下面的執行順序:
(1)執行System.Object.Object()
(2)執行MyBaseClass.MyBaseClass(inti)
(3)執行MyDerivedClass.MyDerivedClass(int i,int j)
可使用base關鍵字指定.NET實例化過程當中使用基類中具備指定參數的構造函數,即:
publicclass MyDerivedClass:MyBaseClass
{
public MyDerivedClass()
{
}
public MyDerivedClass(int i)
{
}
public MyDerivedClass(int i,int j):base(i)
{
}
}
這樣將不會調用MyBaseClass.MyBaseClass()
除base關鍵字外,關鍵字this也可指定構造函數初始化器。這個關鍵字指定在調用指定的構造函數前,.NET實例化過程對當前類使用非默認的構造函數。
例如:
publicclass MyDerivedClass:MyBaseClass
{
publicMyDerivedClass():this(5,6)
{
}
public MyDerivedClass(int i)
{
}
publicMyDerivedClass(int i,int j):base(i)
{
}
}
使用MyDerivedClass. MyDerivedClass()構造類,將執行下列序列:
(1)執行System.Object.Object()
(2)執行MyBaseClass.MyBaseClass(inti)
(3)執行MyDerivedClass.MyDerivedClass(int i,int j)
(4)執行MyDerivedClass.MyDerivedClass()