通用类和静态字段

时间:2012-06-11 18:28:06

标签: c# generics static

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

我有一个班级

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

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

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:1)

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

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

答案 2 :(得分: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++;
     }
}

第一次调用Get CounterAndAddOne打印0,第二次调用1,它将根据需要继续