Partager via


Boxing (C++/CX)

Leboxing est l’encapsulation d’une variable de type valeur, telle que Windows::Foundation::DateTimeou de type scalaire fondamental tel que intdans une classe ref quand la variable est passée à une méthode qui accepte Platform::Object^ comme son type d’entrée.

Passer un type valeur à un paramètre Object^

Bien que vous ne deviez pas convertir par boxing une variable explicitement pour la passer à un paramètre de méthode de type Platform::Object^, vous devez caster explicitement vers le type d'origine lorsque vous récupérez des valeurs qui ont été précédemment converties par boxing.

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

Utilisation de Platform ::IBox<T> pour prendre en charge les types de valeurs nullables

C# et Visual Basic prennent en charge le concept des types valeur autorisant la valeur Null. En C++/CX, vous pouvez utiliser le Platform::IBox<T> type pour exposer des méthodes publiques qui prennent en charge les paramètres de type valeur nullable. L’exemple suivant montre une méthode publique C++/CX qui retourne null lorsqu’un appelant C# passe null pour l’un des arguments.

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

Dans un client C# XAML, vous pouvez l'utiliser comme suit :

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

Voir aussi

Système de type (C++/CX)
Effectuer un cast (C++/CX)
Informations de référence sur le langage C++/CX
Référence aux espaces de noms