Partilhar via


Conversão boxing (C++/CX)

Boxing é o encapsulamento de uma variável de tipo de valor, como Windows::Foundation::DateTime(ou de um tipo escalar fundamental, como int), em uma classe ref quando a variável é transmitida para um método que usa Platform::Object^ como seu tipo de entrada.

Passando um tipo de valor a um parâmetro Object^

Embora não seja preciso executar boxing explicitamente de uma variável para passá-la a um parâmetro de método do tipo Platform::Object^, você precisa fazer a conversão explícita de volta ao tipo original ao recuperar valores cujo boxing foi realizado anteriormente.

Object^ obj = 5; //scalar value is implicitly boxed
int i = safe_cast<int>(obj); //unboxed with explicit cast. 

Usando Platform::IBox<T> para oferecer suporte a tipos que permitem valor nulo

C# e Visual Basic oferecem suporte ao conceito de tipos de valor anuláveis. Em C++/CX, você pode usar o tipo Platform::IBox<T> para expor os métodos públicos que oferecem suporte a parâmetros de tipo de valor anulável. O exemplo a seguir mostra um método público C++/CX que retorna nulo quando um chamador do C# passa nulo para um dos argumentos.

// A WinRT Component DLL
namespace BoxingDemo
{
    public ref class Class1 sealed
    {
    public:
        Class1(){}
        Platform::IBox<int>^ Multiply(Platform::IBox<int>^ a, Platform::IBox<int>^ b)
        {
            if(a == nullptr || b == nullptr)
                return nullptr;
            else
                return ref new Platform::Box<int>(a->Value * b->Value);
        }
    };

Em um cliente XAML do C#, você pode consumi-lo deste modo:

// C# client code
BoxingDemo.Class1 obj = new BoxingDemo.Class1();
int? a = null;
int? b = 5;
var result = obj.Multiply(a, b); //result = null

Confira também

Sistema de tipos (C++/CX)
Conversão (C++/CX)
Referência da linguagem C++/CX
Referência de namespaces