다음을 통해 공유


__box

참고

이 항목에서는 버전 1의 Managed Extensions for C++만 적용 됩니다.버전 1 코드를 유지 하기 위해이 구문은 사용 해야 합니다.참조 하십시오 암시적 Boxing 새 구문에 해당 하는 기능을 사용 하는 방법에 대 한.

__Value 클래스 개체의 관리 되는 복사본을 만듭니다.

__box(value-class identifier)

설명

__box 키워드는 관리 되는 개체를 만드는 데 (에서 파생 된 System::ValueType)에서 기존 __value 클래스 개체. 경우는 __box 키워드 __value 클래스에 적용 됩니다.

  • 관리 되는 개체를 공용 언어 런타임 힙에 할당 됩니다.

  • __Value 클래스 개체의 현재 값은 비트 단위로 관리 되는 개체로 복사 됩니다.

  • 새 관리 되는 개체의 주소를 반환 합니다.

이 프로세스를 boxing 이라고 합니다. 이 __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)는 boxing 되어 관리 되는 매개 변수로 전달 되는 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);
}