在派生方法之前自动调用基方法
Automatically call base method prior the derived one
我有一个基地class:
abstract class ClassPlugin
{
public ClassPlugin(eGuiType _guyType)
{
GuiType = _guyType;
}
public eGuiType GuiType;
protected void Notify(bool b)
{
...
}
protected virtual void RaiseAction()
{
Notify(false);
}
}
然后我有一些派生的 classes:
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();
}
然后您派生的 class 将覆盖 SomeMethodImpl
。执行 SomeMethod
将始终执行 "pre-work",然后是自定义行为,然后是 "post-work".
(在这种情况下,不清楚您希望 Notify
/RaiseEvent
方法如何交互,但您应该能够适当地调整上面的示例。)
我有一个基地class:
abstract class ClassPlugin
{
public ClassPlugin(eGuiType _guyType)
{
GuiType = _guyType;
}
public eGuiType GuiType;
protected void Notify(bool b)
{
...
}
protected virtual void RaiseAction()
{
Notify(false);
}
}
然后我有一些派生的 classes:
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();
}
然后您派生的 class 将覆盖 SomeMethodImpl
。执行 SomeMethod
将始终执行 "pre-work",然后是自定义行为,然后是 "post-work".
(在这种情况下,不清楚您希望 Notify
/RaiseEvent
方法如何交互,但您应该能够适当地调整上面的示例。)