Dela via


Boxning (C++/CX)

Boxning innebär att omsluta en värdetypsvariabel, såsom Windows::Foundation::DateTime, eller en grundläggande skalär typ, såsom int, i en referensklass när variabeln skickas till en metod som tar Platform::Object^ som ingångstyp.

Skicka en värdetyp till en Object^-parameter

Även om du inte uttryckligen behöver boxa en variabel för att skicka den till en metodparameter av typen Plattform::Objekt^, måste du uttryckligen återställa till den ursprungliga typen när du hämtar värden som tidigare har boxats.

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

Använda Platform::IBox<T> för att stödja nullbara värdetyper

C# och Visual Basic stöder begreppet nullbara värdetyper. I C++/CX kan du använda Platform::IBox<T> typen för att exponera offentliga metoder som stöder nullbara värdetypsparametrar. I följande exempel visas en offentlig C++/CX-metod som returnerar null när en C#-anropare skickar null för ett av argumenten.

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

I en C# XAML-klient kan du använda den så här:

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

Se även

Typsystem (C++/CX)
Gjutning (C++/CX)
C++/CX-språkreferens
referens för namnområden