使用英语阅读

通过


OpCodes.Ldflda 字段

定义

查找对象中其引用当前位于计算堆栈的字段的地址。

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

字段值

注解

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

格式 程序集格式 说明
7C <T> ldflda field 将指定对象中的 地址 field 推送到堆栈上。

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

  1. 对象引用 (或指针) 推送到堆栈上。

  2. 从堆栈中弹出对象引用 (或指针) ;找到 对象中指定字段的地址。

  3. 指定字段的地址将推送到堆栈上。

指令 ldflda 将位于 对象中的字段的地址推送到堆栈上。 对象必须作为对象引用 (类型 O) 、托管指针 (类型 &) 、非托管指针 (类型 native int) 、暂时性指针 (类型 *) 或值类型的实例。 可验证代码中不允许使用非托管指针。 对象的字段由必须引用字段成员的元数据标记指定。

返回 ldflda 的值是 (类型 &) 的托管指针,除非对象作为非托管指针推送到堆栈上,在这种情况下,返回地址也是非托管指针 (类型 native int) 。

指令ldflda前面可以有 和 Volatile 前缀之一或两者Unaligned

InvalidOperationException 如果对象不在要从中访问它的应用程序域中,则引发 。 无法加载不在访问应用程序域中的字段的地址。

NullReferenceException 如果对象为 null 且字段不是静态的,则引发 。

MissingFieldException 如果在元数据中找不到指定的字段,则引发 。 当 Microsoft 中间语言 (MSIL) 指令转换为本机代码时(而不是在运行时)时,通常会检查这一点。

以下 Emit 方法重载可以使用 ldflda 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