Compartir vía


Conversión boxing (C++/CX)

Boxing es el ajuste de una variable de tipo de valor como Windows::Foundation::DateTime(o un tipo escalar fundamental como int) en una clase ref cuando la variable se pasa a un método que toma Platform::Object^ como tipo de entrada.

Pasar un tipo de valor a un parámetro de tipo Object^

Aunque no tengas que aplicar conversión boxing de forma explícita a una variable para pasarla a un parámetro de método de tipo Platform::Object^, tienes que volver a convertir de forma explícita al tipo original cuando recuperes valores a los que se ha aplicado conversión boxing previamente.

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

Usar Platform::IBox<T> para admitir tipos de valor que aceptan valores NULL

C# y Visual Basic admiten el concepto de tipos de valor que aceptan valores NULL. En C++/CX,, puedes utilizar el tipo Platform::IBox<T> para exponer métodos públicos que admiten parámetros de tipo de valor que aceptan valores NULL. En el siguiente ejemplo se muestra un método público de C++/CX que devuelve NULL cuando un llamador de C# pasa NULL para uno de los 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);
        }
    };

En un cliente XAML de C#, puedes usarlo de este modo:

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

Consulte también

Sistema de tipos (C++/CX)
Convertir (C++/CX)
Referencia del lenguaje C++/CX
Referencia de espacios de nombres