跟踪基类中的实例化

时间:2011-01-22 10:45:55

标签: c# counter instantiation base-class

目前我通过这种方式跟踪基类的多个实例:

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的多个实例吗?

2 个答案:

答案 0 :(得分:3)

  

获得异常意味着我真的试图根据上面的代码创建多个ChildClass实例吗?

这意味着有超过1个基类(-derived)实例。

  

有没有办法在BaseClass上做到这一点?

在基类中做什么?这部分问题尚不清楚。你已经在基类中完成了它。


但是你的设置不会非常有用,因为它只允许1个基类实例,因此只允许1个派生类。

我假设您希望每个派生类都是Singleton。要在基类中实现它,您需要一个静态HashSet,您可以使用Typename(this.GetType().Name)作为键。

答案 1 :(得分:2)

如果您需要Singleton工厂,可以考虑使用IoC容器而不是自己滚动。许多IoC容器支持Singleton工厂行为作为标准功能。例如,您可以使用Unity