c# - 覆盖时是否可以通过在基类方法中使用“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?
}
}
这里的“回归”会发生什么?为什么程序会跳过它?
解决方案
那里没有return
。就那么简单
一个方法将一直执行,直到它遇到一个return
,方法结束,或者抛出一个异常。在你的情况下,没有回报
base.Method(); // do something
print("still here"); // do something else
// end of method, stop doing stuff
其他资源
方法是包含一系列语句的代码块。程序通过调用方法并指定任何所需的方法参数来执行语句。在 C# 中,每条执行的指令都是在方法的上下文中执行的。
return 关键字也会停止方法的执行。如果返回类型为 void,则没有值的 return 语句对于停止方法的执行仍然有用。如果没有 return 关键字,方法将在到达代码块末尾时停止执行。
Dave S的一个很好的澄清评论
return 只是从您回调给调用者的函数/方法返回。在被调用的函数/方法中返回不会使调用者本身返回。该方法在基类中的事实是无关紧要的。
推荐阅读
- css - 如何将 Angular Clarity Design 4.0 输入宽度设置为 100%?
- azure-devops - 无法在 Azure DevOps 的“代码覆盖率”选项卡中呈现代码覆盖率 HTML 结果
- reactjs - 尝试导入错误:“useThemeVariants”未从“@material-ui/styles”导出
- ssl - 使用 GoDaddy 代码签名证书对 ClickOnce 进行签名
- python - 在一行中顺序调用对象的多个属性?
- d3.js - 如何在不知道它们在 x 和 y 中的位置的 2 个元素之间建立动态线?
- azure-active-directory - 使用 Microsoft Graph API 查找所有已获得管理员同意的应用程序
- sql - 如何根据 Postgres 中的特定键/值对更新 JSON 数组中的对象
- reactjs - react-bootstrap:验证不适用于第二种形式
- android - APK 内的 AndroidManifest.xml 未转换为二进制