覆盖子类中的方法或挂钩事件?

时间:2013-02-25 19:19:09

标签: c# oop

假设我有一个产品类:

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

如果我从这个类继承而且我需要在颜色发生变化时捕获通知,那么覆盖OnColorChanged或在我的子类构造函数中挂钩事件是否更好?

3 个答案:

答案 0 :(得分:3)

我认为首选方法是订阅子类中的事件,如下所示:

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

  private color_changed(object sender, EventArgs e)
  {
      //do stuff
  }
}

答案 1 :(得分:0)

您可以覆盖方法

public override OnColorChanged()
{
    //do stuff
}

答案 2 :(得分:0)

当您还在设计应用时,挂钩不是正确的方法。

订阅子类中的事件,是解决问题的一个干净的解决方案。

这是一个很好的阅读:Hooking on Wiki