次の方法で共有


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

ボックス化 では、値型変数 ( 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

関連項目

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