__box
备注
本主题仅适用于 C++ 托管扩展的版本 1。此语法应仅用于维护版本 1 代码。有关在新语法中使用等效功能的信息,请参阅隐式装箱。
创建 __value 类对象的托管副本。
__box(value-class identifier)
备注
__box 关键字用于从现有 __value 类对象创建托管对象(派生自 System::ValueType)。 当 __box 关键字应用于 __value 类时:
在公共语言运行时堆上分配托管对象。
__value 类对象的当前值按位复制到托管对象。
返回新托管对象的地址。
此过程称为装箱。 它使任何 __value 类对象都能在适用于任何托管对象的一般例程中使用,因为托管对象间接继承自 System::Object(因为 System::ValueType 继承自 System::Object)。
备注
新创建的装箱对象是 __value 类对象的副本。因此,对已装箱对象的值的更改不会影响 __value 类对象的内容。
示例
下面是执行装箱和取消装箱的示例:
// keyword__box.cpp
// compile with: /clr:oldSyntax
#using < mscorlib.dll >
using namespace System;
int main() {
Int32 i = 1;
System::Object* obj = __box(i);
Int32 j = *dynamic_cast<__box Int32*>(obj);
}
在以下示例中,非托管值类型 (V) 被装箱并作为托管参数传递给 Positive 函数。
// keyword__box2.cpp
// compile with: /clr:oldSyntax
#using <mscorlib.dll>
using namespace System;
__value struct V {
int i;
};
void Positive(Object*) {} // expects a managed class
int main() {
V v={10}; // allocate and initialize
Console::WriteLine(v.i);
// copy to the common language runtime heap
__box V* pBoxedV = __box(v);
Positive(pBoxedV); // treat as a managed class
pBoxedV->i = 20; // update the boxed version
Console::WriteLine(pBoxedV->i);
}