如果我错了,请纠正我,但我相信CLR中引发事件的大多数(如果不是全部)类都会从受保护的方法中引发这些事件,例如Form.OnMouseDown ......所以......
在子类中,当你想要处理控件事件时,你想要何时覆盖“OnXyzMethod”而不是简单地添加像Visual Studio这样的事件处理程序?
我唯一想到的是,我可能想要覆盖该方法以防止事件被实际提升......而不是我能想到什么时候可能适用...
答案 0 :(得分:2)
提供OnEvent
方法以引发事件。此方法通常是虚拟的,因此您可以更改在派生类中引发事件的方式和时间。如果您要更改其中任何一项,则只应覆盖此方法。
例如,如果在某些条件下(例如,处于禁用状态的对象)在子类中引发事件是不合适的,则可以覆盖默认的OnEvent
行为以防止事件发生提高。
您不应该覆盖OnEvent
方法来添加行为以响应事件的发生;这就是事件处理程序的目的。
答案 1 :(得分:2)
如果在派生类中,您希望在任何事件处理程序运行之前执行必须执行的操作:
override void OnEvent(...)
{
// ... my stuff that must execute before any event handlers
base.OnEvent(...);
}
或必须在所有事件处理程序运行后发生:
override void OnEvent(...)
{
base.OnEvent(...);
// ... my stuff that must execute after any event handlers
}
或者如果您想要取消该事件,请覆盖OnEvent
。
如果您正在做的事情与其他事件处理程序正在做的事情无关,那么只需处理事件。
您可能想要覆盖的示例是ASP.NET事件的事件处理程序(例如Load)。加载WebForm时,WebForm类中的代码可能应该在它包含的任何UserControl的Load事件之前(或之后)运行。在这种情况下,您可以覆盖OnLoad而不是处理Load事件。