什么时候应该覆盖OnEvent,而不是在继承时订阅事件

Mag*_*Kat 13 .net c# overriding

什么时候应该做以下事情?

class Foo : Control
{
    protected override void OnClick(EventArgs e)
    {
        // new code here
    }
}
Run Code Online (Sandbox Code Playgroud)

与此相反?

class Foo : Control
{
    public Foo()
    {
        this.Click += new EventHandler(Clicked);
    }

    private void Clicked(object sender, EventArgs e)
    {
        // code
    }
}
Run Code Online (Sandbox Code Playgroud)

Ken*_*art 9

覆盖而不是附加委托将导致更高效的代码,因此通常建议您始终尽可能地执行此操作.有关更多信息,请参阅此MSDN文章.这是一个相关的引用:

受保护的OnEventName方法还允许派生类覆盖事件而不将委托附加到它.派生类必须始终调用基类的OnEventName方法,以确保已注册的委托接收事件.


Ore*_*ost 8

该活动面向外部用户.在派生某些控件时,始终覆盖OnEvent方法而不是订阅该事件.这样,您可以确定何时调用代码,因为当您调用base.OnEvent()时会触发实际事件,并且您可以在代码之前,代码之后,代码中间或之后调用此实例.所有.然后,您还可以对事件的返回值做出反应(即EventArgs对象中的已更改属性).