2013-05-09 34 views
0

我有這個抽象類:它始終應該有提供抽象方法的邏輯

 public abstract class Base 
{ 
    protected Timer timer = new Timer { AutoReset = false, Interval = 5000 }; 
    private bool _isTimedOut = false; 

    public bool IsTimedOut { get { return _isTimedOut; } } 

    public Base() 
    { 
     timer.Elapsed += (o, args) => _isTimedOut = true; 
    } 

    public abstract int Recieve(byte[] buffer); 

    private void TimerReset() 
    { 
     timer.Stop(); 
     timer.Start(); 
    } 
} 

每當收到方法是從一個派生類叫做它應該通過調用TimerReset方法復位定時器時間。我能否提供Recieve方法來重置計時器的邏輯?所以當我在派生類中重寫這個成員時,我不必擔心重置計時器嗎?

+0

你嘗試了嗎?似乎嘗試它(或概念)就像提問並等待迴應一樣快。順便說一句,我敢肯定你可以 - 至少我30秒的測試表明你可以。 – Tim 2013-05-09 07:41:42

回答

1

您可以定義Receveive函數調用ResetTimer方法比調用另一個抽象的接收功能(ReceiveCore):

public abstract class Base 
{ 
    protected Timer timer = new Timer { AutoReset = false, Interval = 5000 }; 
    private bool _isTimedOut = false; 

    public bool IsTimedOut { get { return _isTimedOut; } private set; } 

    public Base() 
    { 
     timer.Elapsed += (o, args) => _isTimedOut = true; 
    } 

    public int Recieve(byte[] buffer) // This method cannot be overridden. It calls the TimerReset. 
    { 
     TimerReset(); 
     return RecieveCore(buffer); 
    } 

    protected abstract int RecieveCore(byte[] buffer); // This method MUST be overridden. 

    private void TimerReset() 
    { 
     timer.Stop(); 
     timer.Start(); 
    } 
} 
+0

微軟對這些方法的命名約定似乎是爲['Control.SetBoundsCore()']添加一個「Core」後綴(http://msdn.microsoft.com/zh-cn/library/system.windows .forms.control.setboundscore.aspx)。 (Control.SetBounds()的實現除了調用SetBoundsCore()外,還有其他的工作。) – 2013-05-09 08:12:51

+0

@Matthew:我現在沒有那麼做。感謝您的建議。我更新了我的答案。 – 2013-05-09 08:15:47

+0

謝謝,這對我很有用。 – Rene 2013-05-09 08:20:59

相關問題