在 CSDN 看到的這個範例有兩個問題:
- 不是 thread-safe
- 假如 T 沒有公開無參數的建構函數,會在 runtime 時拋出異常。事實上,這個問題可以使用 generic constraint 在 compiler time 時避免。
所以下面是改良過的版本:
public class Singleton where T : new()
{
private static T _instance = new T();
// to disable beforefieldinit flag
static Singleton()
{}
public static T Instance
{
get
{
return _instance;
}
}
}