2011-12-01 58 views
0

假設我有一些單例只需要實例化。在構造函數中,它啓動計時器,並每秒更新一些模型數據。如果我的程序中不需要這個實例,哪裏可以創建單例實例?

要執行單例構造函數,我只需要引用它。我不需要結果實例,因爲我不需要對整個應用程序執行期間應該存在的單例執行任何操作。

但是C#不允許這樣的結構:WcfLoader.Instance;

所以我要利用這個WcfLoader loader = WcfLoader.Instance;但我從來沒有使用loader實例。

看起來很奇怪,這是否表示我做錯了什麼?

回答

3

爲你的類添加一個靜態的Init方法,然後調用WcfLoader.Init而不是獲取一個實例。它不會看起來很奇怪。

+0

事實上,像你說的那樣創建Init方法,甚至在單例的實例屬性中使用它。 – oscilatingcretin

+1

@oscilatingcretin我不認爲調用init作爲'Instance'屬性getter的副作用是個好主意。 – CodesInChaos

+0

爲什麼不呢?就像'if(_whatever == null)Init();返回_whatever;' – oscilatingcretin

1

不要讓這是獲得Instance屬性的副作用。獲得財產不應該有副作用。

添加一個方法InitTimer()或類似的東西在單身人士。

0

你也可能會涉及到構造函數:

public class WcfLoader { 

    static WcfLoader _instance; 

    public WcfLoader() { 
     if (_instance == null) { 
     // do the initialization 
     _instance = this; 
     } 
    } 
} 

然後初始化在於調用構造函數,甚至沒有存儲參考任何地方。

​​

當然,顯式初始化方法(正如其他人所提到的)是最好的選擇。