利用 C# 2.0 泛型將單例模式通用化,避免為每個類別重寫單例邏輯。
public class Singleton where T : new()
{
private static T _instance;
public static T Instance
{
get
{
if (_instance == null)
_instance = Activator.CreateInstance(); // 需 T 有 public 無參數建構子
return _instance;
}
}
}
// 使用範例
public class Foo { private int count = 0; public int Count { get { count++; return count; } } }
class Program
{
static void Main()
{
Console.WriteLine(Singleton.Instance.Count); // 1
Console.WriteLine(Singleton.Instance.Count); // 2
Console.WriteLine(Singleton.Instance.Count); // 3 遞增證明為同一實例
Console.ReadLine();
}
}
Activator.CreateInstance 要求 T 擁有公用無參數建構子。泛型單例類別本身也是線程不安全的簡易版本,生產環境建議加雙重檢查鎖定或 Lazy。