C# - 从基本方法完成返回

时间:2012-05-28 09:04:31

标签: c# inheritance methods base derived

我有一个在派生类中重写的虚拟基本方法void Action()

行动的第一步是致电base.Action()。如果基本方法中出现某种情况,我不希望处理其余的派生方法。

我想知道是否有关键字或设计模式允许我从基本方法中退出派生方法。

目前我正在考虑将void更改为bool并将其用作流控制,但我想知道是否还有其他设计模式我可以使用。

3 个答案:

答案 0 :(得分:3)

这是一个错误“情况”吗?如果是这样,只需使它抛出异常,并且不要在覆盖中捕获异常。

如果这不是一个错误的情况,那么使用返回类型听起来像是前进的方式,但它可能不适合您的上下文 - 我们真的不知道您想要实现的目标。

另一种选择是使用template method pattern

public abstract class FooBase
{
    public void DoSomething()
    {
        DoUnconditionalActions();
        if (someCondition)
        {
            DoConditionalAction();
        }
    }

    protected abstract void DoConditionalAction();
}

如果您不想使基类成为抽象,则可以使其成为受保护的虚方法,该方法在基类中不执行任何操作,并在适当的派生类中重写。请注意,此处DoSomething 虚拟。

如果这些选项都不合适,您需要向我们提供有关您要实现的目标的更具体信息。

答案 1 :(得分:3)

不要将其与void返回的类型一起使用,但可以这样做,比如bool

public class Base
{
    public virtual bool Action()
    {
       ..
       return boolean-value.
    }
}

public class Child : Base
{
    public override bool Action()
    {
       if(!base.Action()) 
         return false;

       ....
       return boolean-value;
    }
}

或者,如果这是一种特殊情况,请像其他人一样提出异常。

答案 2 :(得分:0)

在基本方法中抛出异常。它将退出调用它的每个方法,直到它被捕获。