C# 覆盖子类中的方法或挂起事件?
假设我有一个产品类:C# 覆盖子类中的方法或挂起事件?,c#,oop,C#,Oop,假设我有一个产品类: public class Product { public event ProductColorChangedEventHandler ColorChanged; protected virtual void OnColorChanged() { if (null != ColorChanged) ColorChanged(); } } 如果我来自这个类,并且需要在发生颜色更改时捕获通知,那么重写OnCo
public class Product
{
public event ProductColorChangedEventHandler ColorChanged;
protected virtual void OnColorChanged()
{
if (null != ColorChanged)
ColorChanged();
}
}
如果我来自这个类,并且需要在发生颜色更改时捕获通知,那么重写
OnColorChanged
还是在我的子类构造函数中挂接事件更好?我认为首选方法是订阅子类中的事件,如下所示:
public class SubProduct : Product
{
public SubProduct()
{
ColorChanged += new ProductColorChangedEventHandler(color_changed);
}
private color_changed(object sender, EventArgs e)
{
//do stuff
}
}
您可以重写该方法
public override OnColorChanged()
{
//do stuff
}
当你还在设计你的应用程序时,挂钩不是正确的方法 订阅子类中的事件,是问题的干净解决方案
这里有一个很好的读物:以上都没有。子类应该调用
base.OnColorChanged()
,并在基本调用的基础上提供自己的实现。我认为没有理由为此目的设置活动。我想到了Decorator模式。很抱歉,我的措辞可能不正确(我更新了OP),它应该说“捕获通知”而不是“获取”。换句话说,当颜色更改事件发生时,我需要在我的子类中执行一些操作。@BlueChameleon那么您的意思是“订阅”事件,或“添加事件处理程序”,而不是“捕获”或“获取”。在这种情况下,请参见INotifyPropertyChanged
。是的,他能。他在问他是应该还是应该订阅这个活动。请注意,使用您的方法,因为您没有调用基本实现,所以现在无法调用订阅实际事件的所有事件处理程序,这就是为什么我不喜欢像这样重写该方法。