簡體   English   中英

將循環條件檢查應用於所有派生類

[英]Apply recurring conditional check to all derived classes

我有一個帶有抽象Work()方法的工作基礎類。 這在我繼承的類中被重寫/實現。

我要實現的是將中止條件應用於所有派生類。 模板方法模式似乎在這里沒有幫助,因為我需要在我的抽象Work()類中進行此檢查。

解決方法是將Work()虛擬化,但隨后我不再強制實施它(我想做的事情):

public abstract class First
{
    protected virtual void Work()
    {
        //do stuff
    }
}

public class Second : First
{
    protected override void Work()
    {
        base.Work();
    }
}

有什么辦法可以實現我的目標?

模板方法模式似乎在這里沒有幫助,因為我需要在我的抽象Work()此檢查

您選擇了正確的模式,但是沒有正確應用它。

模板方法模式背后的想法是使Work非虛擬,並為子類提供單獨的虛擬或抽象方法。 這樣,所有可能中止工作的檢查都將在基類的Work函數中執行,而派生類將為檢查成功后的操作提供實際的實現:

public abstract class First {
    public void Work() {
        if (!CheckPreconditions()) {
            // Abort the job
            return;
        }
        DoWork();
    }
    protected abstract void DoWork();
}

public class Second : First {
    protected override void DoWork() {
        // Do the actual work here
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM