2011-01-22 63 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

相关问题