4

私は次のクラス構造を持っています:

public abstract class PresenterBase
{
    public static Dictionary<string, MethodInfo> methodsList;

    public void Bind()
    public void Initialize();
}


public class DevicePresenter: PresenterBase
{
   public void ShowScreen();
   public void HandleEvents();    
}

public class HomePresenter: PresenterBase
{
   public void ShowScreen();
   public void HandleEvents();
}

HomePresenter と DevicePresenter を使用して、PresenterBase で定義された methodsList 静的メンバーの別のコピーを作成したいと考えています。

残念ながら、それらは上記の実装と同じコピーを共有しています。

HomePresenter と DevicePresenter の MethodsList のコピーを個別に作成できるという代替アプローチはありますか? 将来、誰かが別の派生クラスを追加する場合、そのクラスにmethodsListを追加することを覚えておく必要があるため、派生クラスでmethodsListを定義するつもりはありません。

4

3 に答える 3

6

静的にしないでください。うまくいきませんか?

staticタイプに関連付けられていることを意味します。non-staticは、インスタンスに関連付けられていることを意味します。

便利な Visual Studio インスタンスはありませんがabstract、基本クラスでフィールドをマークすることもできると思います。コンパイラは、それを派生クラスに追加するように要求します。あなたは間違いなくプロパティでそれを行うことができます.

別の注意として、上記のコードを考えると、おそらく抽象メソッドShowScreen()HandleEvents()を に追加しPresenterBaseます。

于 2011-03-17T09:22:46.970 に答える
3

質問に直接答えるには、基本クラスをジェネリックにすることができます。これにより、個別の静的辞書が得られます。これが適切な設計であるかどうかは別の問題です。

public abstract class PresenterBase<T> where T : PresenterBase<T>
{
    public static Dictionary<string, MethodInfo> methodsList = 
         new Dictionary<string,MethodInfo>();

}

public class DevicePresenter : PresenterBase<DevicePresenter>
{

}

public class HomePresenter : PresenterBase<HomePresenter>
{

} 
于 2011-03-17T10:26:19.263 に答える
1

各インスタンスに独自のリストを持たせ、methodsList を PresenterBase のプロパティとして定義し、PresenterBase でプロパティをDictionary<string, MethodInfo>取得してこの値に設定するコンストラクタを定義するため、静的にはしません。

そうすれば、どの派生クラスもこれを提供する必要がありますが、各インスタンスには独自のリストがあります。

@Michael Kjorlingが示唆するように、ShowScreen()抽象メソッドも定義しますHandleEvents()PresenterBase

于 2011-03-17T09:28:49.743 に答える