0

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

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并且每个类都返回“真”的声明cachedList == null

4

2 回答 2

4

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

于 2012-04-24T05:38:43.823 回答
1

您是否在问如何创建一个通用类的静态成员,该成员在所有专业化(即 的所有值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;
    }
}

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

于 2012-04-24T05:51:35.813 回答