共用方式為


__box

注意事項注意事項

本主題只適用於 Managed Extensions for C++ 第 1 版。這個語法只可用於維護第 1 版的程式碼。如需在新語法中使用對等功能的詳細資訊,請參閱Boxing (C++ 元件擴充功能)

建立 __value 類別物件的 Managed 複本。

__box(value-class identifier)

備註

__box 關鍵字可用來從現有的 __value 類別物件建立 Managed 物件 (衍生自 System::ValueType)。 當 __box 關鍵字套用至 __value 類別時:

  • Managed 物件會配置在 Common Language Runtime 堆積上。

  • __value 類別物件的目前值會以位元為單位複製到 Managed 物件中。

  • 將會傳回新 Managed 物件的位址。

這個程序稱為 Boxing。 這樣一來,所有 __value 類別物件就能在適用於任何 Managed 物件的泛型常式中使用,因為 Managed 物件會從 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);
}

在下列範例中,Unmanaged 實值類型 (V) 會進行 Boxed 並且做為 Managed 參數傳遞至 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);
}