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

标签 c# generics static

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

最佳答案

您可以将请求转移到内部非通用类来存储共享数据:

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"

关于c# - 在不同的泛型类实例之间共享静态字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27067160/

相关文章:

c# - System.Web.HttpException 文件不存在 - 页面加载正常 (ASP.NET)

c# - UTF-8 在 C# 中用双引号编码字符串

C# 获取泛型对象内部的对象

java - 静态变量值

c# - C# 中的 AddressOf 替代方案

c# - 为什么关闭标签显示在 View 中?

generics - 为什么 `&(?Sized + Trait)`无法转换为 `&dyn Trait`?

java - Java 方法分派(dispatch)如何与泛型和抽象类一起工作?

c++ - 在 Visual C++ 中设置修饰符 "public: static"

C++ const 基于输入的静态启动