Bagikan melalui


Tinju (C++/CX)

Tinju membungkus variabel jenis nilai seperti Windows::Foundation::D ateTime—atau jenis skalar mendasar seperti int—di kelas ref ketika variabel diteruskan ke metode yang mengambil Platform::Object^ sebagai jenis inputnya.

Meneruskan jenis nilai ke parameter Object^

Meskipun Anda tidak perlu secara eksplisit mengetik variabel untuk meneruskannya ke parameter metode jenis Platform::Object^, Anda harus secara eksplisit mentransmisikan kembali ke jenis asli ketika Anda mengambil nilai yang sebelumnya telah dikotak.

Object^ obj = 5; //scalar value is implicitly boxed
int i = safe_cast<int>(obj); //unboxed with explicit cast. 

Menggunakan Platform::IBox<T> untuk mendukung jenis nilai nullable

C# dan Visual Basic mendukung konsep jenis nilai nullable. Di C++/CX, Anda dapat menggunakan Platform::IBox<T> jenis untuk mengekspos metode publik yang mendukung parameter jenis nilai nullable. Contoh berikut menunjukkan metode publik C++/CX yang mengembalikan null saat pemanggil C# melewati null untuk salah satu argumen.

// 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);
        }
    };

Dalam klien C# XAML, Anda dapat menggunakannya seperti ini:

// C# client code
BoxingDemo.Class1 obj = new BoxingDemo.Class1();
int? a = null;
int? b = 5;
var result = obj.Multiply(a, b); //result = null

Baca juga

Sistem Tipe (C++/CX)
Transmisi (C++/CX)
Referensi Bahasa C++/CX
Referensi Namespace