寫在前面的話函數
對於構造函數,咱們都很熟悉,用於在實例化類的時候,使用new關鍵字,new出一個實例來供使用。spa
那麼對於靜態構造函數,充當的是什麼角色呢,它和非靜態構造函數有什麼區別呢?它又有什麼好處呢?日誌
描述繼承
靜態構造函數用於初始化任何靜態數據(靜態方法裏只能引用靜態字段,靜態構造函數也屬於靜態方法的一種)。編譯器
靜態構造方法在建立第一個實例或引用類的靜態變量以前,會自動調用靜態構造函數。string
特色:編譯
1.靜態構造函數沒有修飾符,也沒有參數class
2.靜態構造方法沒法繼承,且沒法手動調用變量
3.無參數的靜態構造函數能夠和無參數的非靜態函數共存(儘管方法前面相同,可是一個屬於類,一個屬於實例)構造函數
4.若是類中含有帶初始值的靜態成員,那麼編譯器會生成默認的靜態構造函數
典型應用:
當類使用日誌文件時,能夠使用這種構造函數,向其中寫入日誌。
示例:
public class Person { static string name = "張三"; static Person() { /* * 若是註釋下面的話 * 則GetName方法返回 張三 * 不然返回 李四 */ name = "李四"; } public string GetName() { return Person.name; } }
咱們來新建一個Student類,讓它繼承自Person類,看看GetName方法會出現獲得什麼呢?
public class Student : Person { }此時,GetName方法獲取的值仍然是 李四。此代碼等同於:
public class Student : Person { public Student() : base() { } }
注意:
若是有子類繼承自帶靜態構造方法的類時,子類必須有空構造函數,不然會報錯。