在不同的泛型类实例之间共享静态字段

时间:2014-11-21 17:38:31

标签: c# generics static

我知道不会在不同的紧密构造类型的实例之间共享泛型类型。这意味着对于具有静态字段C<T>的通用类XC<int>.XC<string>.X的值具有完全不同的独立值。
在我的情况下,我真的需要在具有不同泛型参数的实例之间共享一个静态字段。 我找到的唯一解决方案是“定义一个非通用的基类来存储你的静态成员,然后将你的泛型类型设置为继承这种类型。
问题是我的类已经从其他.net类继承 还有其他方法可以解决这个问题吗?

2 个答案:

答案 0 :(得分:3)

您可以将请求移植到内部非泛型类以存储共享数据:

public class Bar{}
public class FooGeneric<T> : Bar
{
    public static string SharedData {
        get {
            return Foo.SharedData;
        }
        set{
            Foo.SharedData = value;
        }
    }
}

internal class Foo
{
    public static string SharedData = "Fizz";
}

用法:

Console.WriteLine(FooGeneric<string>.SharedData);    // "Fizz"

FooGeneric<string>.SharedData = "Buzz";
Console.WriteLine(FooGeneric<string>.SharedData);    // "Buzz"

Console.WriteLine(FooGeneric<int>.SharedData);       // "Buzz"

答案 1 :(得分:1)

继承自通用类当前继承的其他.NET类的非泛型基类。在那里存储您的共享静态。当然,如果其他.NET类本身是通用的,这将不起作用;幸运的是,你表示情况并非如此。