__box
注意事項 |
---|
本主題僅適用於第 1 版的 Managed Extensions for C++。這個語法只應該用於維護第 1 版的程式碼。請參閱隱含 Boxing如有關在新語法中使用的相等功能。 |
建立受管理的 __value 類別物件的複本。
__box(value-class identifier)
備註
__box關鍵字用來建立受管理的物件 (衍生自 System::ValueType) 從現有的 __value 類別物件。 當__box關鍵字會套用至 __value 類別:
受管理的物件會在一般的語言執行階段堆積上配置。
__Value 類別物件的目前值位元複製到受管理的物件。
會傳回新的 managed 物件的位址。
此程序稱為 boxing。 這可讓任何能在適合任何 managed 物件,因為在間接繼承 managed 的物件的一般常式的 __value 類別物件 System::Object (因為 System::ValueType 繼承自 System::Object)。
注意事項 |
---|
新建立的 boxed 的物件是 __value 類別物件的複本。因此,修改 boxed 物件的值不會影響 __value 類別物件的內容。 |
範例
以下就是會 boxing 和 unboxing 的範例:
// 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);
}