Поделиться через


__box

Примечание

Этот раздел применим только к версии 1 управляемых расширений для C++.Этот синтаксис должен использоваться только для поддержания Кода версии 1.См. Неявная упаковка-преобразование дополнительные сведения об использовании эквивалентным функциям в новом синтаксисе.

Создает управляемую копию объекта класса __value.

__box(value-class identifier)

Заметки

__box ключевое слово используется для создания управляемый объект (производный от System:: ValueType__value) из существующего объекта класса. После __box ключевое слово применяется к классу __value:

  • Управляемый объект выбран в куче среды CLR.

  • Текущее значение объекта класса __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);
}