懶惰的執行緒安全 Singleton(使用 LazyT)

.Net 4.0 型別 Lazy 保證執行緒安全物件初始化,因此這種型別可用於製作單例。

public class LazySingleton
{
    private static readonly Lazy<LazySingleton> _instance =
        new Lazy<LazySingleton>(() => new LazySingleton());
 
    public static LazySingleton Instance
    {
        get { return _instance.Value; }
    }

    private LazySingleton() { }
}

使用 Lazy<T> 將確保僅在呼叫程式碼中的某個位置使用物件時才對其進行例項化。

一個簡單的用法就像:

using System;
                    
public class Program
{
    public static void Main()
    {
        var instance = LazySingleton.Instance;
    }
}

.NET 小提琴現場演示