首页 > 解决方案 > 覆盖时是否可以通过在基类方法中使用“return”来防止子方法运行?

问题描述

这一定是一个奇怪的问题,但是为什么下面的这个逻辑不起作用?

public class Base
{
    public virtual void Method()
    {
        return;
    }
}

public class Child : Base
{
    public override void Method()
    {
        base.Method();        // If this calls 'return;' here,
        print("still here");  // then why this is still running?
    }
}

这里的“回归”会发生什么?为什么程序会跳过它?

标签: c#returnoverriding

解决方案


那里没有return。就那么简单

一个方法将一直执行,直到它遇到一个return,方法结束,或者抛出一个异常。在你的情况下,没有回报

base.Method();         // do something
print("still here");   // do something else
// end of method, stop doing stuff

其他资源

方法(C# 编程指南)

方法是包含一系列语句的代码块。程序通过调用方法并指定任何所需的方法参数来执行语句。在 C# 中,每条执行的指令都是在方法的上下文中执行的。

返回值

return 关键字也会停止方法的执行。如果返回类型为 void,则没有值的 return 语句对于停止方法的执行仍然有用。如果没有 return 关键字,方法将在到达代码块末尾时停止执行。

Dave S的一个很好的澄清评论

return 只是从您回调给调用者的函数/方法返回。在被调用的函数/方法中返回不会使调用者本身返回。该方法在基类中的事实是无关紧要的。


推荐阅读