5

複数の異なるジェネリック クラス間で 1 つの静的変数を共有する方法はありますか?

クラスがあります

class ClassA <T> : ObservableCollection<T> {

    static int counter;

    //...
}

そして、次のように、パラメーターのインスタンス化が異なるいくつかのインスタンス

ClassA<int> a = new ClassA<int>();
ClassA<double> b = new ClassA<double>();
ClassA<float> c = new ClassA<float>();

インスタンス a、b、および c が static フィールド counter を共有する方法はありますか?

回答とコメントは大歓迎です:)

4

3 に答える 3

5

独自のシングルトン クラスでカウンターをラップし、A、B、および C からカウンター クラスを参照できます。

于 2012-06-11T18:29:45.027 に答える
1

最も簡単な解決策:

class Program
{
    static void Main(string[] args)
    {
        ClassA<int> a = new ClassA<int>();
        ClassA<double> b = new ClassA<double>();
        Console.WriteLine(a.GetCounterAndAddOne());
        Console.WriteLine(b.GetCounterAndAddOne());
        Console.Read();
    }
}

class BaseA
{
    protected static int counter = 0;
}

class ClassA<T> : BaseA
{
    public int GetCounterAndAddOne()
    {
        return BaseA.counter++;
    }
}

GetCounterAndAddOne への最初の呼び出しはカウンターを 0 に設定し、2 番目の呼び出しはカウンター 1 を設定し、必要に応じて続行します。

于 2012-06-11T18:37:50.547 に答える
1

静的フィールドはそのクラスに依存します (これは、どの静的メンバーがどれであるかを C# が処理する方法です)。別のジェネリック型を渡すと、別のクラスを効果的に定義することになります。

いいえ。共有カウンターのようなものは、そのカウンターの状態に最も関心があるのはそのクラスであるため、Thing That Counts を呼び出しているクラスによっておそらくより適切に処理されるでしょう。なんらかの理由でこれを行うことができない場合 (このクラスは無関係なスレッドの束によって参照されています)、静的クラスを作成してライブラリの状態を保持できますが、これはテスト容易性に問題を引き起こすので、試してみますできれば避けるために。

于 2012-06-11T18:36:48.307 に答える