ボックス化 (C++/CX)
ボックス化 とは、入力型として Platform::Object^を取るメソッドに変数が渡されたときに、ref クラス内で、値の型変数 ( int
Windows::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