OpCodes.Ldind_Ref 字段

定义

将对象引用作为 O(对象引用)类型间接加载到计算堆栈上。

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

字段值

注解

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

格式 程序集格式 说明
50 ldind.ref 将地址 addr 处的对象引用作为类型加载到堆栈上 O

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

  1. 将地址推送到堆栈上。

  2. 地址从堆栈中弹出;提取位于 地址的对象引用。

  3. 提取的引用将推送到堆栈上。

指令ldind.ref间接将对象引用类型 、 或 *) 的native int&指定地址 (加载到堆栈上, 类型O为 。

ldind所有指令都是指定相应内置值类的指令的快捷方式Ldobj

请注意,小于 4 个字节的整数值在加载到评估堆栈上时会扩展为 int32 (不 native int) 。 浮点值在加载到计算堆栈上时转换为 F 类型。

格式正确的 Microsoft 中间语言 (MSIL) 可确保 ldind 以与指针类型一致的方式使用指令。

最初推送到堆栈的地址必须与计算机上对象的自然大小保持一致, NullReferenceException 否则, (查看 Unaligned 预防措施的前缀说明) 可能会出现 。 例如 Ldloca ,返回地址的所有 MSIL 指令的结果 (和 Ldarga) 安全对齐。 对于大于 1 字节的数据类型,字节排序依赖于目标 CPU。 依赖于字节排序的代码可能不会在所有平台上运行。

NullReferenceException 如果检测到无效的地址,则可能会引发。

以下 Emit 方法重载可以使用 ldind.ref opcode:

适用于

产品 版本
.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