《C#高效編程》讀書筆記13-正確的初始化靜態成員變量
阿新 • • 發佈:2017-12-19
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-正確的初始化靜態成員變量