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获取异常是否意味着我真的尝试根据上述代码创建多个实例?

4

2 回答 2

3

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

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

有什么办法可以做到 BaseClass 吗?

在基类中做什么?这部分问题不清楚。您已经在基类中这样做了。


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

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

于 2011-01-22T10:51:21.003 回答
2

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

于 2011-01-22T11:00:34.183 回答