Boxing (C++/CX)
將實值類型變數 (例如) 傳遞給使用 ) 或基本純量類型變數 (例如 ) 傳遞給使用Boxing int
作為其輸入類型的方法時, Boxing 會將此變數包裝在 ref 類別中。
傳遞實值類型給 Object^ 參數
雖然您不需要明確將 Box 變數,以傳遞給 Platform::Object^類型的方法參數,但是當您擷取先前已 Box 的值時,您必須明確轉換回原始類型。
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