2011-12-21 93 views

回答

3

是的,絕對。這由C#規範保證,第10.12節。我試圖找到一個更講解線程的位,因爲該部分只保證它會被執行一次。

請注意,如果您有一種「遞歸初始化」設置,您仍然可以在完全初始化之前在類中執行代碼 - 並且如果兩個靜態構造函數相互依賴,那麼您最終可能如果每個類都在不同的線程中初始化,會導致死鎖。

另請注意,存在一個空的靜態構造函數會影響靜態字段初始值設定項的計時 - 如果您沒有靜態構造函數,那麼當該字段可能被初始化時,CLR會有更多的餘地。 (實際行爲隨着時間的推移發生了變化,但始終在規範範圍內。)有關靜態字段初始值設定項的更多信息,請參見規範的第10.5.5.1節。

基本上,保持靜態構造函數儘可能簡單和自包含。