在基类的事件处理程序之前使继承的事件处理程序触发的正确方法是什么?

isp*_*iro 1 c# inheritance event-handling winforms

我有一个基类(本身继承自Panel)和一个继承的类.基类有一个Click事件处理程序.

在base的处理程序之前,在继承类中触发Click事件处理程序的正确方法是什么,然后只执行base?

我的解决方法是以下形式:

class first : Panel
{
    public first()
    {
        Click += first_Click;
    }

    protected virtual void first_Click(object sender, EventArgs e)
    {
        doHandler();
    }

    protected void doHandler()
    {
        MessageBox.Show("first");
    }
}

class derived : first
{
    protected override void first_Click(object sender, EventArgs e)
    {
        MessageBox.Show("derived");
        doHandler();
    }
}
Run Code Online (Sandbox Code Playgroud)

有一种直截了当的方式吗?

谢谢.

Han*_*ant 9

听你自己的事情是没有意义的.改为覆盖OnClick()方法.

class derived : first
{
    protected override void OnClick(EventArgs e)
    {
        MessageBox.Show("derived");
        base.OnClick(e);
    }
}
Run Code Online (Sandbox Code Playgroud)

或者先调用base.OnClick()来改变顺序.