5

有没有办法在几个不同的泛型类之间共享一个静态变量?

我有一堂课

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 共享静态字段计数器?

非常感谢任何答案和评论:)

4

3 回答 3

5

您可以将计数器包装在它自己的单例类中,然后从 A、B 和 C 中引用计数器类。

于 2012-06-11T18:29:45.027 回答
1

静态字段依赖于它们的类(这是 C# 如何处理告诉哪些静态成员是哪些),并且当您传入不同的泛型类型时,您实际上是在定义一个单独的类。

所以不行。像共享计数器这样的东西可能会更好地由调用 Thing That Counts 的任何类来处理,因为无论如何它都是对该计数器的状态最感兴趣的类。如果您出于某种原因无法执行此操作(该类被一堆不相关的线程引用),那么您可以创建一个静态类来保存库的状态,但这会导致可测试性问题,所以我会尝试如果可以的话,避免它。

于 2012-06-11T18:36:48.307 回答
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,第二次调用将计数器设置为 1,它将根据需要继续。

于 2012-06-11T18:37:50.547 回答