單例建構函式模式
public class SingletonClass
{
public static SingletonClass Instance { get; } = new SingletonClass();
private SingletonClass()
{
// Put custom constructor code here
}
}
因為建構函式是私有的,所以不能通過使用程式碼來建立 SingletonClass
的新例項。訪問 SingletonClass
的單個例項的唯一方法是使用靜態屬性 SingletonClass.Instance
。
Instance
屬性由 C#編譯器生成的靜態建構函式指定。 .NET 執行時保證靜態建構函式最多執行一次,並在首次讀取 Instance
之前執行。因此,所有同步和初始化問題都由執行時執行。
請注意,如果靜態建構函式失敗,則 Singleton
類在 AppDomain 的生命週期中將永久不可用。
此外,靜態建構函式不保證在第一次訪問 Instance
時執行。相反,它會在此之前的某個時刻執行。這使得初始化發生的時間不確定。在實際情況中,JIT 經常在引用 Instance
的方法的編譯 (而不是執行) 期間呼叫靜態建構函式。這是效能優化。
有關實現單例模式的其他方法,請參閱 Singleton 實現頁面。