目前我通过这种方式跟踪基类的多个实例:
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 :(得分:3)
获得异常意味着我真的试图根据上面的代码创建多个ChildClass实例吗?
这意味着有超过1个基类(-derived)实例。
有没有办法在BaseClass上做到这一点?
在基类中做什么?这部分问题尚不清楚。你已经在基类中完成了它。
但是你的设置不会非常有用,因为它只允许1个基类实例,因此只允许1个派生类。
我假设您希望每个派生类都是Singleton。要在基类中实现它,您需要一个静态HashSet,您可以使用Typename(this.GetType().Name
)作为键。
答案 1 :(得分:2)
如果您需要Singleton工厂,可以考虑使用IoC容器而不是自己滚动。许多IoC容器支持Singleton工厂行为作为标准功能。例如,您可以使用Unity。