装箱 (C++/CX)

装箱就是当一个值类型变量(如 Windows::Foundation::DateTime)或基础标量类型(如 int)传递给以 Platform::Object^ 作为其输入类型的方法时,将该变量或类型包装在一个 ref 类中的过程。

将值类型传递给 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++/CX 公共方法,该方法在 C# 调用方为某个自变量传递 null 时返回 null。

// 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 语言参考
命名空间参考