使用泛型类型作为基类的静态成员

本文关键字:基类 静态成员 泛型类型 | 更新日期: 2023-09-27 18:32:00

我在类型的基类中有一个静态成员:

private static Dictionary<string, IEnumerable<T>> cachedList;    

此泛型成员应在所有派生类中可用。 我不知道如何解决它。

编辑
将成员更改为受保护,无法解决我的问题。
为了进一步澄清,我使用了这行代码

    public static void Cache(bool cached)
    {
        string value = typeof(T).ToString();
        if (cachedList == null)
            cachedList = new Dictionary<string, IEnumerable<T>>();
        ///some other things
    }

但是每个派生类都有自己的cachedList副本,每个类都返回"true"作为cachedList == null

使用泛型类型作为基类的静态成员

语句

将此成员设为protected而不是私有。通过这种方式,您将能够访问任何派生类型中完全相同的字典实例。

您是否在问如何创建跨所有专业化(即T的所有值)共享的泛型类的静态成员?如果是这样,请继续阅读:

不能直接执行此操作,但是可以添加基类继承自的额外基类:

public class NonGenericBase
{
    private static Dictionary<string, IEnumerable<object>> cachedList = new Dictionary<string, IEnumerable<object>>();
    protected static IEnumerable<T> GetCachedList<T>(string key) {
        return (IEnumerable<T>)cachedList[key];
    }
    protected static void SetCachedList<T>(string key, IEnumerable<T> value)
        where T : class
    {
        cachedList[key] = (IEnumerable<object>)value;
    }
}

然后将 GetCachedListSetCachedList 的用法包装在泛型派生类中。