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

时间:2012-04-24 05:34:54

标签: c# static-members generic-collections

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

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

此通用成员应该可用于所有派生类。我不确定如何解决它。

EDIT
将会员改为保护,不能解决我的问题 为了更清楚,我使用了这行代码

    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

的语句都返回“true”

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分: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;
    }
}

然后在通用派生类中包含GetCachedListSetCachedList的用法。