3

我看到开发人员在 WinForms 中做的一件常见的事情是表单/控件订阅他们自己的事件,所以你得到

this.Load += new System.EventHandler(this.WelcomeQuickViewWF_Load);
this.Activated += new System.EventHandler(this.WelcomeQuickViewWF_Activated);

而不是

protected override void OnActivated(EventArgs e)
{
}

现在我知道第二种方式更面向对象,第一种方式是事件驱动的,我倾向于重构以覆盖 - 有什么理由不这样做吗?我不想做的是做一些并非真正需要的改变,纯粹是一种审美选择。

4

2 回答 2

3

MSDN 说,重写On*方法是在派生类中处理事件的首选技术:

OnActivated方法还允许派生类在不附加委托的情况下处理事件。重写此方法是在派生类中处理事件的首选技术。

所以我想说事件处理程序方法是非惯用的。

于 2012-06-11T07:11:57.933 回答
3

通过订阅您自己的事件,当有其他事件订阅者时,您放弃了对何时调用您的代码的控制权。通过重写事件引发方法,您可以完全控制何时调用您的代码。您可以在通知订阅者之前或之后调用它。您的代码也不会在可取消事件中被取消。

如果该方法是可覆盖的,请这样做。否则注册,因为您别无选择。

于 2012-06-11T07:12:44.403 回答