1. 程式人生 > >《C#高效編程》讀書筆記13-正確的初始化靜態成員變量

《C#高效編程》讀書筆記13-正確的初始化靜態成員變量

pub 以及 ado singleton mys 如果 方法 () 運行

在創建某個類型實例之前,就應該初始化該實例的所有靜態成員變量。而C#為此提供了靜態初始化器和靜態構造函數。
靜態構造函數是特殊的構造函數,將在其他所有方法執行之前以及變量或屬性被第一次訪問之前執行。
若是簡單的為某個成員分配空間,可以使用初始化器語法來替代靜態構造函數。若是要以更復雜一些的邏輯初始化靜態成員變量,那麽可以使用靜態構造函數。
單例模式是靜態構造函數最常用的一個場景,只需將實例構造函數聲明為私有,然後添加初始化器即可:

public class MySingleton
{
    private static readonly MySingleton theOneAndOnly = new MySingleton();

    private MySingleton(){}

    public static MySingleton TheOnly
    {
        get { return theOneAndOnly; }
    }
}

如果你還有更復雜的初始化單例的邏輯,則可以使用靜態構造函數:

public class MySingleton
{
    private static readonly MySingleton theOneAndOnly;

    private MySingleton(){}

    static MySingleton()
    {
        theOneAndOnly = new MySingleton();
        //other code...
    }

    public static MySingleton TheOnly
    {
        get { return theOneAndOnly; }
    }
}

靜態構造函數相比靜態初始化器相比,其優點是可以捕獲異常,因為靜態構造函數和靜態初始化器出錯時,CLR將會終止你的程序,而可以捕獲異常的靜態構造函數就可以使程序繼續運行,但其缺點也在此,靜態構造函數只能初始化一次,若出現錯誤造成某個類型沒有初始化,那麽CLR將不會再次進行初始化嘗試。

《C#高效編程》讀書筆記13-正確的初始化靜態成員變量