using System;
public sealed class Singleton
{
private static volatile Singleton instance;
private static readonly object syncRoot = new Object();
private Singleton() { }
public static Singleton Instance
{
get
{
if (instance == null)
{
lock (syncRoot)
{
if (instance == null)
instance = new Singleton();
}
}
return instance;
}
}
}
typeof(Singleton) 引發死鎖風險。| 優點 | 缺點 |
|---|---|
| 靜態初始化由 CLR 保證時機;DCL 在 CLR 正確運作 | 需顯式處理多執行緒初始化競爭 |
| 延遲實例化,首次存取才建立 | 大多數情況靜態初始化已足夠 |
實務建議:單純單例優先用 static readonly 欄位或 Lazy<T>;極少數需精確控制初始化時機才用 DCL。