在派生方法之前自动调用基方法

本文关键字:方法 调用 派生 | 更新日期: 2023-09-27 17:53:54

有一个基类:

abstract class ClassPlugin
{
    public ClassPlugin(eGuiType _guyType)
    {
            GuiType = _guyType;
    }
    public eGuiType GuiType;
    protected void Notify(bool b)
    {
        ...
    }
    protected virtual void RaiseAction()
    {
        Notify(false);
    }
}

然后我有一些派生类:

class ClassStartWF : ClassPlugin
{
    public ClassStartWF(eGuiType _guyType) : base(_guyType) { }
    public event delegate_NoPar OnStartWorkFlow_Ok;
    public void Action()
    {
        Notify(true);
        RaiseAction(eEventType.OK);
    }
    public new void RaiseAction(eEventType eventType)
    {
            base.RaiseAction();<--------------------
            if (OnStartWorkFlow_Ok == null)
                MessageBox.Show("Event OnStartWorkFlow_Ok null");
            else
                OnStartWorkFlow_Ok();
        }
    }
}

现在在raise动作中,我必须在base.RaiseAction()方法之前调用,但这可以被忘记。在调用派生方法之前,是否有一种方法可以自动调用基方法(并在那里执行一些操作)?

在派生方法之前自动调用基方法

标准的解决方案是使用模板方法模式:

public abstract class Base
{
    // Note: this is *not* virtual.
    public void SomeMethod()
    {
        // Do some work here
        SomeMethodImpl();
        // Do some work here
    }
    protected abstract void SomeMethodImpl();
}

那么你的派生类只是覆盖SomeMethodImpl。执行SomeMethod将始终执行"预工作",然后是自定义行为,然后是"后工作"。

(在这种情况下,不清楚您希望Notify/RaiseEvent方法如何交互,但您应该能够适当地调整上面的示例。)