Boxing (C++/CX)
L'operazioneBoxing esegue il wrapping di una variabile di tipo valore come Windows::Foundation::DateTimeo di un tipo scalare fondamentale come int
in 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