1

製品クラスがあるとしましょう:

public class Product
{
    public event ProductColorChangedEventHandler ColorChanged;
    protected virtual void OnColorChanged()
    {
        if (null != ColorChanged)
          ColorChanged();
    }
}

このクラスから継承していて、色の変化があったときに通知をキャッチする必要がある場合OnColorChanged、サブクラス コンストラクターでイベントをオーバーライドまたはフックする方がよいでしょうか?

4

3 に答える 3

3

好ましい方法は、次のようにサブクラスのイベントにサブスクライブすることだと思います。

public class SubProduct : Product
{
  public SubProduct()
  {
      ColorChanged += new ProductColorChangedEventHandler(color_changed);
  }

  private color_changed(object sender, EventArgs e)
  {
      //do stuff
  }
}
于 2013-02-25T19:24:39.110 に答える
0

アプリをまだ設計しているときに、フッキングを行うのは適切な方法ではありません。

サブクラスのイベントにサブスクライブすることは、問題のクリーンな解決策です。

ここに良い読み物があります:Wikiにフックする

于 2013-02-25T19:46:12.657 に答える
0

メソッドをオーバーライドできます

public override OnColorChanged()
{
    //do stuff
}
于 2013-02-25T19:35:09.940 に答える