Effective C# Item13: Initialize Static Class Membe

來源:互聯網
上載者:User
本文轉自:http://www.chenjiliang.com/article/View.aspx?ArticleID=1810&TypeID=34
我們知道應當在建立類型的所有執行個體之前首先初始化靜態成員變數。C#讓我們使用靜態初始化和靜態建構函式來達到這個目的。靜態建構函式是一種特殊的函數,它會在類中的所有的方法、成員變數或者屬性定義之前運行。我們使用這個方法在類中來聲明靜態變數,構造singleton設計模式或者其他需要的工作。我們不應當使用預設的建構函式,一些特殊的私人函數或者其他的聲明靜態變數的方法。

      就像執行個體的初始化一樣,我們可以使用靜態建構函式來聲明靜態成員變數。如果僅僅是需要簡單的靜態成員變數,我們可以使用初始化的方法。如果我們需要使用較為複雜的邏輯時,我們就需要使用靜態成員變數的建構函式來建立它們。

      在C#的涉及模式中,Singleton模式是我們經常要用到的。我們只要將類的執行個體化建構函式設為private,再添加對靜態成員的初始化:   儲存

public class MySingleton{private static readonly MySingleton _theOneAndOnly = new MySingleton();public static MySingleton TheOnly{get{return _theOneAndOnly;}}private MySingleton(){}}

Singleton模式可以被簡單的使用下面的方法來達到。   儲存

public class MySingleton{private static readonly MySingleton _theOneAndOnly;static MySingleton(){_theOneAndOnly = new MySingleton();}public static MySingleton TheOnly{get{return _theOneAndOnly;}}private MySingleton(){}}

就像執行個體的初始化一樣,靜態成員變數的初始化會在靜態建構函式被調用之前執行。

      當我們的應用程式第一次裝載我們的類型時,CLR會調用我們的靜態建構函式。我們只能定義一個靜態建構函式,並且它不能擁有參數。因為靜態建構函式是被CLR調用的,因此我們必須小心它可能會引起異常。一旦其中包含異常,CLR就會中止我們的程式。我們不直接對靜態變數進行初始化而是使用靜態建構函式的原因也在於此。通過靜態建構函式,我們可以比較容易得捕獲這些異常。  儲存

static MySingleton(){try{_theOneAndOnly = new MySingleton();}catch{//捕獲異常    }}

靜態初始化和靜態建構函式提供了更清潔和更簡便的方法來聲明我們類型中的靜態成員。它們更容易被人理解,也更容易進行調試。

      譯自   Effective C#:50 Specific Ways to Improve Your C#                      Bill Wagner著

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.