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 の複数のインスタンスを実際に作成しようとしたことを意味しますか?

これは、複数の基本クラス (派生) インスタンスがあることを意味します。

BaseClass でそれを行う方法はありますか?

ベースクラスで何をしますか?質問のこの部分は不明です。あなたはすでにベースクラスでそれをやっています。


ただし、基本クラスのインスタンスを 1 つしか許可しないため、派生クラスは 1 つしか許可されないため、セットアップはあまり役に立ちません。

各派生クラスをシングルトンにしたいと仮定します。これを基本クラスに実装するには、たとえば Typename ( this.GetType().Name) をキーとして使用できる静的な HashSet が必要です。

于 2011-01-22T10:51:21.003 に答える
2

シングルトン ファクトリが必要な場合は、独自に展開する代わりに IoC コンテナーを使用することを検討できます。多くの IoC コンテナは、Singleton ファクトリの動作を標準機能としてサポートしています。たとえば、Unityを使用できます。

于 2011-01-22T11:00:34.183 に答える