靜態構造函數

寫在前面的話函數

對於構造函數,咱們都很熟悉,用於在實例化類的時候,使用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()
        {

        }
    }
注意:
若是有子類繼承自帶靜態構造方法的類時,子類必須有空構造函數,不然會報錯。
相關文章
相關標籤/搜索