Упаковка-преобразование (C++/CX)
Упаковка — это заключение переменной типа значения, например Windows::Foundation::DateTime, или базового скалярного типа, например int
, в ссылочный класс при передаче переменной методу, который в качестве входного типа принимает 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++/CX, возвращающий значение NULL, когда вызывающий объект C# передает значение 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);
}
};
В клиенте XAML C# его можно использовать следующим образом:
// 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
Справочник по пространствам имен