ボックス化 (C++/CX)

ボックス化 とは、入力型として Platform::Object^を取るメソッドに変数が渡されたときに、ref クラス内で、値の型変数 ( intWindows::Foundation::DateTime など) または基本的スカラー型 ( など) をラップすることです。

Object^ パラメーターへの値の型の引き渡し

変数を明示的にボックス化しなくても、型 Platform::Object^のメソッド パラメーターに渡すことはできますが、以前にボックス化されたことがある値を取得するときは、明示的にキャストして元の型に戻す必要があります。

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

Platform::IBox<T> の使用による null 許容値型のサポート

C# および Visual Basic では、null 許容値型の概念をサポートしています。 C++/CX では、Platform::IBox<T> 型を使用して、null 許容値型パラメーターをサポートするパブリック メソッドを公開できます。 次の例では、C# 呼び出し元が引数の 1 つに null を渡すと null を返す C++/CX パブリック メソッドを示しています。

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

C# XAML クライアントでは、これを次のように利用できます。

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

関連項目

型システム (C++/CX)
キャスト (C++/CX)
C++/CX 言語リファレンス
名前空間参照