繁体   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