Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Boxing é envolver uma variável de tipo de valor, como Windows::Foundation::DateTime—ou um tipo escalar fundamental, como int—numa classe de referência quando a variável é passada a um método que usa Platform::Object^ como seu tipo de entrada.
Passando um tipo de valor para um parâmetro Object^
Embora não seja necessário encaixotar explicitamente uma variável para passá-la para um parâmetro de método do tipo Platform::Object^, você precisa retornar explicitamente ao tipo original quando recuperar valores que foram encaixotados anteriormente.
Object^ obj = 5; //scalar value is implicitly boxed
int i = safe_cast<int>(obj); //unboxed with explicit cast.
Usando Platform::IBox<T> para suportar tipos de valor anuláveis
C# e Visual Basic suportam o conceito de tipos de valor anulável. Em C++/CX, você pode usar o Platform::IBox<T> tipo para expor métodos públicos que oferecem suporte a parâmetros de tipo de valor anulável. O exemplo a seguir mostra um método público C++/CX que retorna null quando um chamador C# passa null para um dos argumentos.
// 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);
}
};
Em um cliente XAML C#, você pode consumi-lo assim:
// C# client code
BoxingDemo.Class1 obj = new BoxingDemo.Class1();
int? a = null;
int? b = 5;
var result = obj.Multiply(a, b); //result = null
Ver também
Tipo de Sistema (C++/CX)
Conversão (C++/CX)
Referência da linguagem C++/CX
Referência de namespaces