C# - 从基方法完全返回

本文关键字:返回 方法 | 更新日期: 2023-09-27 18:35:34

我有一个虚拟基方法void Action()在派生类中被覆盖。

操作的第一步是调用base.Action()。如果基方法中出现这种情况,我不希望处理派生方法的其余部分。

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

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

C# - 从基方法完全返回

这是一个错误的"情况"吗?如果是这样,只需让它引发异常,并且不要在覆盖中捕获异常。

如果不是错误情况,那么使用返回类型听起来确实是一种前进的方向,但它可能不适合你的上下文 - 我们真的不知道你要实现什么。

另一种选择是使用模板方法模式

public abstract class FooBase
{
    public void DoSomething()
    {
        DoUnconditionalActions();
        if (someCondition)
        {
            DoConditionalAction();
        }
    }
    protected abstract void DoConditionalAction();
}
如果不想使基类

抽象,可以使其成为受保护的虚拟方法,该方法在基类中不执行任何操作,并在适当的情况下在派生类中被重写。请注意,DoSomething在这里不是虚拟的。

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

不要将它与返回的类型一起使用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;
    }
}

或者,如果这是一个例外情况,请像其他人建议的那样提出例外。

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