OpCodes.Box 字段

定义

将值类转换为对象引用(O 类型)。

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

字段值

注解

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

格式 程序集格式 说明
8C <T> valTypeToken 将) 中指定的 valTypeToken 类型的值类型 (转换为 true 对象引用。

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

  1. 将值类型推送到堆栈上。

  2. 从堆栈中弹出值类型;将 box 执行 操作。

  3. 对生成的“装箱”值类型的对象引用将推送到堆栈上。

值类型在公共语言基础结构 (CLI) 中具有两个单独的表示形式:

  • 当值类型嵌入到另一个对象或堆栈中时使用的“raw”形式。

  • “装箱”窗体,其中值类型中的数据包装 (装箱) 到 对象中,以便它可以作为独立实体存在。

指令 box 将“raw” (未装箱) 值类型转换为对象引用 (类型 O) 。 这是通过创建新对象并将值类型中的数据复制到新分配的对象来实现的。 valTypeToken 是一个元数据标记,指示堆栈上值类型的类型。

OutOfMemoryException 如果内存不足,无法满足请求,则引发 。

TypeLoadException 如果找不到类,则引发 。 当 Microsoft 中间语言 (MSIL) 转换为本机代码而不是在运行时时,通常会检测到此情况。

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

适用于

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