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あり、すべてのクラスはステートメントに対して「true」を返します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次に、との使用法をSetCachedList汎用派生クラスでラップします。

于 2012-04-24T05:51:35.813 に答える