C# Language 單身構造函數模式


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實現頁面。