2011-01-22 74 views
1

目前我跟蹤這樣一個基類的實例的數量:在基類跟蹤實例

private static int _instanceCount = 0; 

protected BaseClass() 
{ 
    Interlocked.Increment(ref _instanceCount); 

    if (_instanceCount > 1) 
     throw new Exception("multiple instances detected."); 
} 

然後,我有子類與構造是這樣的:

public ChildClass(): base() 
{ 
    // Empty Constructor 
} 

,我得到異常當然。我可以將代碼從BaseClass構造函數移動到ChildClass構造函數,但它是一種冗餘(所有具有相同代碼的子代)。

有沒有辦法在BaseClass

獲得異常意味着我真的試圖根據上面的代碼創建多個ChildClass的實例?

+0

這有什麼用?是爲了做一個單身? – Nekresh 2011-01-22 10:49:57

+0

調用者是一個`Singleton`工廠,我要確保沒有重複。 – Xaqron 2011-01-22 10:50:59

回答

3

獲得異常意味着我真的試圖根據上面的代碼創建多個ChildClass的實例嗎?

這意味着有超過1個基類(派生)的實例。

有沒有辦法做到這一點BaseClass?

做什麼在基類?這部分問題還不清楚。你已經在基類中做了。


但是你的設置不會很有用,因爲它只允許1個基類的實例,因此只允許1個派生類。

我假設你希望每個派生類都是一個單例。要在基類中實現這個功能,您需要一個靜態HashSet,您可以在其中使用Typename(this.GetType().Name)作爲鍵。

2

如果你想要一個Singleton工廠,你可以考慮使用一個IoC容器來代替你自己的。許多IoC容器都支持Singleton工廠行爲作爲標準功能。例如,您可以使用Unity

相關問題