共用方式為


__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);
}