Boxing (C++/CX)

Boxing opakowuje zmienną typu wartości, taką jak Windows::Foundation::D ateTime — lub podstawowy typ skalarny, taki jak int— w klasie ref, gdy zmienna jest przekazywana do metody, która przyjmuje wartość Platform::Object^ jako typ danych wejściowych.

Przekazywanie typu wartości do parametru Object^

Mimo że nie musisz jawnie polecić zmiennej, aby przekazać ją do parametru metody typu Platform::Object^, musisz jawnie rzutować z powrotem do oryginalnego typu podczas pobierania wartości, które zostały wcześniej w polu.

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

Używanie platformy::IBox<T> do obsługi typów wartości dopuszczanych do wartości null

Język C# i Visual Basic obsługują koncepcję typów wartości dopuszczanych do wartości null. W języku C++/CX można użyć Platform::IBox<T> typu , aby uwidocznić metody publiczne, które obsługują parametry typu wartości dopuszczających wartość null. W poniższym przykładzie pokazano publiczną metodę C++/CX, która zwraca wartość null, gdy obiekt wywołujący języka C# przekazuje wartość null dla jednego z argumentów.

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

W kliencie XAML języka C# możesz go użyć w następujący sposób:

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

Zobacz też

System typów (C++/CX)
Rzutowanie (C++/CX)
Dokumentacja języka C++/CX
Dokumentacja przestrzeni nazw