有没有办法在几个不同的泛型类之间共享一个静态变量?
我有一个班级
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共享静态字段计数器的方法?
非常感谢任何答案和评论:)
答案 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,它将根据需要继续