共用方式為


拳擊(C++/CX)

Boxing 會包裝實值型別變數,例如 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 語言參考
命名空間參考