OpCodes.Ret 字段

定义

从当前方法返回,并将返回值(如果存在)从被调用方的计算堆栈推送到调用方的计算堆栈上。

public static readonly System.Reflection.Emit.OpCode Ret;

字段值

注解

下表列出了指令的十六进制和 Microsoft 中间语言 (MSIL) 程序集格式,以及简短的参考摘要:

格式 程序集格式 说明
2A Ret 从 方法返回 ,可能返回值。

堆栈过渡行为(按顺序排列)是:

  1. 返回值从被调用方计算堆栈中弹出。

  2. 在步骤 1 中获取的返回值将推送到调用方计算堆栈上。

如果被调用方计算堆栈上不存在返回值,则不会返回任何值, (调用方或调用方方法) 没有堆栈转换行为。

当前方法的返回值的类型(如果有)确定要从堆栈顶部提取并复制到调用当前方法的方法堆栈的值的类型。 当前方法的计算堆栈必须为空,要返回的值除外。

指令ret不能用于将控制权转移到 、、 filtercatchfinally 块外try。 在 或 catchtry,将 Leave 指令与指令的目标ret一起使用,该指令位于所有封闭的异常块之外。 filter由于 和 finally 块在逻辑上是异常处理的一部分,而不是嵌入其代码的方法,因此正确生成的 Microsoft 中间语言 (MSIL) 指令不会从 或 finallyfilter执行方法返回。

以下 Emit 方法重载可以使用 ret 操作码:

适用于

产品 版本
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9, 10
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0