ボックス化 では、値型変数 ( Windows::Foundation::D ateTime など) または基本的なスカラー型 ( int
など) を ref クラスでラップします。これは、変数が入力型として Platform::Object^ を受け取るメソッドに渡される場合です。
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