可以給類編寫無參的靜態建構函式。這種函式只執行一次,而一般的建構函式 ,只要建立類的物件,就會執行。
編寫靜態建構函式的乙個原因是,類有一些靜態欄位或屬性,需要在第一次使用類之前,從外部源進行初始化。
.net執行庫沒有確保什麼時候執行靜態建構函式,所以不應把要求在某個特定時刻執行的**放在靜態建構函式中。也不能預計不同類的靜態建構函式按照什麼順序執行。但是,可以確保靜態建構函式至多執行一次,即在**引用類之前呼叫它。在c#中,通常在第一次呼叫類的任何程式之前執行靜態建構函式。
注意,靜態建構函式沒由訪問修飾符,其他c#**從來不顯示呼叫它,但在載入類時,總是由.net執行庫呼叫它,所以像public或private這樣的訪問修飾符就沒有任何意義。出於同樣原因,靜態建構函式不能帶任何引數,乙個類也只能由乙個靜態建構函式。很顯然,靜態建構函式只能訪問類的靜態成員,不能訪問類的例項成源。
無參的例項建構函式與靜態建構函式可以在同乙個類中定義。儘管引數列表相同,但這不矛盾,因為在載入類時執行靜態建構函式,而在建立例項執行無參的例項建構函式,所以合適執行那個建構函式不會衝突。
如果多個類都有靜態建構函式,先執行那個靜態建構函式就不確定。此時靜態建構函式中的**不應依賴於其他靜態建構函式的執**況 。另一當面,如果任何靜態欄位由預設值,就在呼叫靜態建構函式之前分配他們。
靜態建構函式
1 靜態建構函式既沒有訪問修飾符,也沒有引數。因為是.net呼叫的,所以像public和private等修飾符就沒有意義了。2 是在建立第乙個類例項或任何靜態成員被引用時,net將自動呼叫靜態建構函式來初始化類,也就是說我們無法直接呼叫靜態建構函式,也就無法控制什麼時候執行靜態建構函式了。3 乙個類...
靜態建構函式
1.類的建構函式有三種 例項建構函式,私有建構函式和靜態建構函式,靜態建構函式只能初始化靜態資料,或執行一次特殊的操作,這種函式只執行一次,在第一次建立類的物件的時候或者呼叫靜態成員時就會自動呼叫它,靜態建構函式沒有訪問修飾符,也沒有任何引數。可以參考一下下面的 using system using...
靜態建構函式
1 如果乙個類沒有定義靜態建構函式,就算它有靜態字段,編譯器也不會自動給這個類生成乙個預設的靜態建構函式。驗證如下 using system using system.collections.generic using system.text namespace teststaticconstruc...