原文連結: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關鍵字僅呼叫引數最匹配的那個建構函式.