2016-07-01 38 views
0

我有一個基類:自動調用基方法之前派生一個

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(); 
     } 
    } 
} 
現在在加薪行動

我之前打電話base.RaiseAction()方法,但可以忘記。有沒有辦法在調用派生方法之前自動調用基方法(並在那裏執行一些操作)?

+0

你爲什麼要使用而不是*壓倒一切的'new' * 'RaiseAction'?這是一個奇怪的方法。 –

+0

對不起,沒有意識到它。編輯 – Luca

+1

@Jon Skeet:仔細觀察,提問者似乎並沒有壓倒一切。基本方法沒有參數,派生的參數也沒有。該代碼似乎並不正確。 – BoltClock

回答

8

標準的解決方案是使用模板方法模式

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方法進行交互,但你應該能夠適應上述適當的例子。)

相關問題