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();
    }
}

Recieve メソッドが派生クラスから呼び出されるたびに、TimerReset メソッドを呼び出してタイマーをリセットする必要があります。タイマーをリセットするロジックを受信メソッドに提供することはできますか? では、派生クラスでこのメンバーをオーバーライドすると、タイマーのリセットについて心配する必要はありませんか?

4

1 に答える 1

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();
    }
}
于 2013-05-09T07:41:47.453 に答える