Boxing (C++/CX)

BeimBoxing wird eine Werttypvariable wie Windows::Foundation::DateTime– oder ein grundlegender Skalartyp wie int– innerhalb einer Verweisklasse umgebrochen, wenn die Variable an eine Methode übergeben wird, die Platform::Object^ als Eingabetyp akzeptiert.

Übergeben eines Werttyps an einen Object^-Parameter

Obwohl Sie für eine Variable nicht explizit Boxing anwenden müssen, um sie an einen Methodenparameter des Typs Platform::Object^zu übergeben, müssen Sie eine Umwandlung zum ursprünglichen Typ explizit vornehmen, wenn Sie Werte abrufen, die zuvor geschachtelt wurden.

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

Verwenden von Platform::IBox<T> zur Unterstützung nullwertbarer Werttypen

C# und Visual Basic unterstützen das Konzept von Typen, die NULL-Werte zulassen. In C++/CX können Sie den Platform::IBox<T> Typ verwenden, um öffentliche Methoden verfügbar zu machen, die Nullwerte-Typparameter unterstützen. Das folgende Beispiel zeigt eine öffentliche C++/CX-Methode, die NULL zurückgibt, wenn ein C#-Aufrufer null für eines der Argumente übergibt.

// 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 einem C#-XAML-Client können Sie diese Methode wie folgt verwenden:

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

Siehe auch

Typsystem (C++/CX)
Umwandlung von Typen (C++/CX)
C++-/CX-Programmiersprachenreferenz
Referenz zu Namespaces