Boxing (C++/CX)

L'operazioneBoxing esegue il wrapping di una variabile di tipo valore come Windows::Foundation::DateTimeo di un tipo scalare fondamentale come intin una classe di riferimento quando la variabile viene passata a un metodo che accetta Platform::Object^ come relativo tipo di input.

Passare un tipo di valore a un parametro Object^

Sebbene non sia necessario eseguire la conversione boxing di una variabile per passarla a un parametro di metodo di tipo Platform::Object^, è necessario eseguire esplicitamente il cast al tipo di origine quando si recuperano valori in precedenza sottoposti alla conversione boxing.

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

Uso di Platform::IBox<T> per supportare i tipi valore nullable

C# e Visual Basic supportano il concetto dei tipi di valore nullable. In C++/CX è possibile usare il Platform::IBox<T> tipo per esporre metodi pubblici che supportano parametri di tipo valore nullable. L'esempio seguente mostra un metodo pubblico C++/CX che restituisce Null quando un chiamante C# passa Null per uno degli argomenti.

// 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);
        }
    };

In un client XAML C# puoi utilizzarlo nel modo seguente:

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

Vedi anche

Sistema di tipi (C++/CX)
Cast (C++/CX)
Riferimenti al linguaggio C++/CX
Riferimenti a spazi dei nomi