Winforms订阅自己的活动

时间:2012-06-11 07:06:28

标签: c# winforms event-driven

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

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

而不是

protected override void OnActivated(EventArgs e)
{
}

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

2 个答案:

答案 0 :(得分:3)

覆盖On*方法的

MSDN says是在派生类中处理事件的首选技术:

  

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

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

答案 1 :(得分:3)

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

如果方法可以覆盖,请执行此操作。否则请注册,因为您别无选择。