【轉載】關於C#靜態建構函式的幾點說明

來源:互聯網
上載者:User

標籤:檔案   互斥   建構函式   配置資訊   row   一個   直接   環境   初始化   

一、定義

 靜態建構函式是C#的一個新特性,其實好像很少用到。不過當我們想初始化一些靜態變數的時候就需要用到它了。這個建構函式是屬於類的,而不是屬於哪裡執行個體的,就是說這個建構函式只會被執行一次。也就是在建立第一個執行個體或引用任何靜態成員之前,由.NET自動調用。

class SimpleClass{// Static constructorstatic SimpleClass()    {//    }}

  在使用靜態建構函式的時候應該注意幾點:
  1、靜態建構函式既沒有存取修飾詞,也沒有參數。因為是.NET調用的,所以像public和private等修飾符就沒有意義了。
  2、是在建立第一個類執行個體或任何靜態成員被引用時,.NET將自動調用靜態建構函式來初始化類,也就是說我們無法直接調用靜態建構函式,也就無法控制什麼時候執行靜態建構函式了。
  3、一個類只能有一個靜態建構函式。
  4、無參數的建構函式可以與靜態建構函式共存。儘管參數列表相同,但一個屬於類,一個屬於執行個體,所以不會衝突。
  5、最多隻運行一次。
  6、靜態建構函式不可以被繼承。
  7、如果沒有寫靜態建構函式,而類中包含帶有初始值設定的靜態成員,那麼編譯器會自動產生預設的靜態建構函式。

      8、安全執行緒

      關於安全執行緒需要特別說明一下,由於程式可能在多線程環境下運行,也就是可能出現同時多個線程準備執行靜態建構函式的情況。CLR確保這個過程是安全的,實際上調用靜態建構函式的線程需要先獲得一個互斥線程同步鎖,如果有多個線程試圖執行類型的靜態建構函式,只有一個線程能獲得該鎖;獲得鎖的線程完成初始類型初始化操作,其它線程只能等待;當初始化完成,等待的線程被喚醒,然後發現靜態建構函式已經被執行過,就不會再執行。

二、作用

  用於初始化靜態成員。有時候我們會從設定檔讀取一些值作為靜態變數,類似這樣:  

public class StaticTester{private static readonly string key = ConfigurationManager.AppSettings["key"];private static readonly string value = ConfigurationManager.AppSettings["value"];static StaticTester(){           }}
  如果要讀取的配置資訊比較多,而且要加入一些邏輯判斷,那麼可以這樣:  
public class StaticTester{    private static readonly string key;    private static readonly string value;         static StaticTester()    {        key = ConfigurationManager.AppSettings["key"];        if (string.IsNullOrEmpty(key))        {            throw new Exception("key變數未被正確配置!");                            }        value = ConfigurationManager.AppSettings["value"];        if (string.IsNullOrEmpty(value))        {            throw new Exception("value變數未被正確配置!");        }    }}

三、執行順序

  1. 運行時,優先對靜態變數進行初始化。

      2. 如果有靜態建構函式,那麼在建立第一個執行個體對象或者引用任何靜態變數之前,調用靜態建構函式。

  3. 其它操作。

 

【轉自】https://www.cnblogs.com/4littleProgrammer/p/4883012.html

           https://www.cnblogs.com/michaelxu/archive/2007/03/29/693401.html

【轉載】關於C#靜態建構函式的幾點說明

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.