对所有派生类应用重复的条件检查

时间:2017-11-16 17:25:20

标签: c# derived-class

我有一个带有抽象Work()方法的作业基类。这在我继承的类中被覆盖/实现。

我想要实现的是将中止条件应用于所有派生类。模板方法模式似乎对我没有帮助,因为我需要在我的抽象Work() - 类中进行此检查。

解决方法是将Work()设为虚拟,但后来我不再强制执行它(我想做的事):

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

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

有没有办法实现我的目标?

1 个答案:

答案 0 :(得分:2)

  

模板方法模式似乎对我没有帮助,因为我需要在抽象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
    }
}