使用泛型类型作为基类的静态成员
本文关键字:基类 静态成员 泛型类型 | 更新日期: 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;
}
}
然后将 GetCachedList
和 SetCachedList
的用法包装在泛型派生类中。