原文連結:http://blog.csdn.net/shanyongxu/article/details/46501683
建構函式
所謂的建構函式就是和類名重名的且沒有返回值的方法.
class Person
{
public Person()//建構函式
{
}
}
一般情況下,如果沒有提供建構函式,編譯器會在後臺建立一個預設的無引數的建構函式.這是一個非常基本的建構函式,他只能吧所有的成員欄位初始化為標準的預設值(例如,引用型別為空引用,數值資料型別為0,bool為false).
建構函式可以過載,只要他們的簽名不同即可.
class Person
{
public Person()//建構函式
{
}
public Person(int number)
{
}
}
但是有一點需要注意的是,如果提供了帶引數的建構函式,編譯器就不會自動的提供預設的建構函式,只有在沒有定義任何建構函式時,編譯器才會自動的提供預設的建構函式.也就是說,只要有自己定義的建構函式,不管有沒有引數,系統都不會提供預設的那個基本的構造函數了.
例如:
class Person
{
private int age;
public Person(int age)
{
this.age=age;
}
}
如果想要建立物件:Person person=new Person()//這是錯誤的,因為沒有無引數的建構函式.
一般使用this關鍵字區分成員欄位和同名的引數.
如果把建構函式的修飾符程式設計private或者protected,這樣相關的類也不能訪問他們:
public class Person
{
private int age;
private Person(int age)
{
this.age=age;
}
}
如果宣告的建構函式為私有的沒那麼外部無法通過使用new關鍵字來建立該類的物件(但是可以在Person中編寫一個公用靜態屬性和方法,用來例項化該類).在以下兩種情況下是有用的:
1.類僅用作某些靜態成員或屬性容器,因此永遠不會例項化它
2.希望類僅通過呼叫某個靜態成員函式來例項化.
靜態建構函式是C#的一個新特徵,這種建構函式只執行一次,而前面的建構函式是例項建構函式,只要建立類的物件,就會執行他.
class Person
{
static Person()
{
}
}
靜態建構函式的存在意義是,類有一些驚天欄位火屬性,需要在第一次使用類之前,從外部源中初始化這些靜態欄位和屬性.
注意靜態建構函式沒有訪問修飾符,其他的C#程式碼從來不呼叫他,但是在載入類時,從石油.NET執行庫呼叫它,所以像public和private這樣的訪問修飾符就沒有任何意義,同樣,靜態建構函式也不能有任何引數,一個類只能有一個驚天建構函式,顯然靜態的建構函式只能訪問類的靜態成員,不能訪問類的例項成員.靜態建構函式是C#的一個新特性,其實好像很少用到。不過當我們想初始化一些靜態變數的時候就需要用到它了。這個建構函式是屬於類的,而不是屬於哪裡例項的,就是說這個建構函式只會被執行一次。也就是在建立第一個例項或引用任何靜態成員之前,由.NET自動呼叫。
class SimpleClass
{
// Static constructor
static SimpleClass()
{
//
}
}
建構函式裡呼叫其他的建構函式(建構函式初始化器)
class Car
{
private string description;
private int ID;
public Car(string description, int ID)
{
this.description = description;
this.ID = ID;
}
public Car(string description)
: this(description, 4)
{
this.description = description;
}
}
這裡,this關鍵字僅呼叫引數最匹配的那個建構函式.