標籤:style class blog code http tar
在C#程式中,沒有全域變數的概念,這意味著所有的成員變數只有該類的執行個體才能操作這些資料,這起到了“資訊隱藏”的作用。但有些時候,這樣做卻不是個明智的選擇。C#中靜態變數——它在類中類似全域變數,儲存類的公用資訊,所有該類(而非對象或執行個體)共用該值。
靜態建構函式——static修飾的建構函式,靜態建構函式是C#的一個新特性,在編程過程中用處並不廣,它的主要目的是用於初始化一些靜態變數。因為這個建構函式是屬於類的,而不屬於任何一個執行個體,所以這個建構函式只會被執行一次,而且是在建立此類的第一個執行個體或引用任何靜態成員之前,由.NET自動調用。靜態經典應用——單例模式
public class Singleton { private static Singleton instance; private Singleton() { } public static Singleton GetInstance() { if (instance == null) { instance = new Singleton(); } return instance; } }
一 在使用靜態建構函式的時候應該注意以下幾點:
1、靜態建構函式既沒有存取修飾詞,也沒有參數。--因為是.NET調用的,所以像public和private等修飾符就沒有意義了。
2、在建立第一個類執行個體或任何靜態成員被引用時,.NET將自動調用靜態建構函式來初始化類。--也就是說我們無法直接調用靜態建構函式,也不可能知道靜態建構函式何時會被調用。
3、一個類只能有一個靜態建構函式。
4、無參數的建構函式可以與靜態建構函式共存。--儘管參數列表相同,但一個屬於類,一個屬於執行個體,所以不會衝突。
5、最多隻運行一次。
6、靜態建構函式不可以被繼承。
7、如果沒有寫靜態建構函式,而類中包含帶有初始值設定的靜態成員,那麼編譯器會自動產生預設的靜態建構函式。
二 C#中類的初始化順序:
1. 先變數後建構函式。
--變數先被初始化,然後建構函式被執行
2. 先靜態化後執行個體化。
--當一個類被訪問時,靜態變數和建構函式最先被初始化.接著是對象的執行個體化變數和建構函式被初始化
3. 衍生類別和基類初始化順序
a. 對於變數和靜態建構函式先衍生類別後基類。
--其派生對象在基底物件之前被初始化.比如C類派生自B類,B類派生自A類,那麼變數和靜態建構函式被初始化次序是C-B-A.
b.對於執行個體建構函式則相反,先基類再衍生類別
--基類建構函式在衍生類別建構函式之前執行,比如C類派生自B類,B類派生自A類,那麼執行個體建構函式被執行次序是A-B-C.