【描述】:Singleton模式要求一個類有且僅有一個實例,而且提供了一個全局的訪問點函數
【方式1】測試
sealed class Singleton { /// <summary> /// 靜態只讀變量,Instance只會在編譯時初始化一次,這就保證了是單例 /// </summary> internal static readonly Singleton Instance = new Singleton(); /// <summary> /// 私有構造函數 /// </summary> private Singleton() { } }
這種方式不能實現延遲初始化(調用時才進行初始化),它在編譯時就初始化出了一個實例,sealed保證類不能被繼承。url
【方式二】spa
sealed class Singleton { // readonly不會被從新實例化 internal static readonly Singleton Instance = new Singleton(); /// <summary> /// 私有構造函數,防止外部new /// </summary> private Singleton() { } /// <summary> /// 在建立第一個類實例或任何靜態成員被引用時,.NET將自動調用靜態構造函數來初始化類, /// 最多隻運行一次 /// </summary> static Singleton() { // 可用於測試何時初始化 Console.WriteLine("..."); } }
這種方式經過 靜態構造函數 實現了延遲初始化。code