2012-03-10 90 views

回答

15

在C#單身人士(也包括Lazy<>)的最佳來源屬於喬恩斯基特:http://csharpindepth.com/Articles/General/Singleton.aspx

假設你想有一個類:

  • 代表一個獨特的資源,所以它應該有一個唯一的實例,
  • 的實例都需要昂貴的初始化,
  • 初始化參數將只在運行時,
  • 有,你不會使用之後的所有對象的情況下,
  • 有超過一個線程可以嘗試同時初始化singleton對象,

如果上述的大部分條件是真實的,你將需要確保類是單例,並且唯一實例是懶惰初始化的(不需要初始化直到需要)如果你的目標是C#4.0或更高版本,使用Lazy<>可以使你的設計更簡單,更易讀,更易於記憶。

1

文檔說

使用延遲(中T)的實例推遲或大或 資源密集型對象的創建或資源密集型 任務的執行,特別是當這樣的創建或在程序的生命週期內執行可能不會發生 。

所以,你只有在你需要它的情況下才能創建單例實例。

延遲實例化通常很有用,因此在應用程序啓動時不支付所有創建成本 - 可以提供更好的用戶體驗。