Bagikan melalui


Properti (C++/CX)

Jenis Windows Runtime mengekspos data publik sebagai properti. Kode klien mengakses properti seperti datamember publik. Secara internal, properti diimplementasikan sebagai blok yang berisi metode get accessor, metode aksesor yang ditetapkan, atau keduanya. Dengan menggunakan metode aksesor, Anda dapat melakukan tindakan tambahan sebelum atau setelah mengambil nilai, misalnya, Anda dapat mengaktifkan peristiwa atau melakukan pemeriksaan validasi.

Keterangan

Nilai properti terkandung dalam variabel privat—yang dikenal sebagai penyimpanan backing—yang merupakan jenis yang sama dengan properti . Properti dapat berisi aksesor yang ditetapkan, yang menetapkan nilai ke penyimpanan backing, dan mendapatkan aksesor yang mengambil nilai penyimpanan backing. Properti bersifat baca-saja jika hanya menyediakan aksesor get, tulis-saja jika hanya menyediakan aksesor yang ditetapkan, dan baca/tulis (dapat dimodifikasi) jika menyediakan kedua aksesor.

Properti sepele adalah properti baca/tulis yang secara otomatis mengimplementasikan pengakses dan penyimpanan backing. Anda tidak memiliki akses ke implementasi kompilator. Namun, Anda dapat mendeklarasikan properti kustom dan secara eksplisit mendeklarasikan aksesor dan penyimpanan cadangannya. Dalam aksesor, Anda dapat melakukan logika apa pun yang Anda butuhkan, seperti memvalidasi input ke aksesor yang ditetapkan, menghitung nilai dari nilai properti, mengakses database, atau menembakkan peristiwa saat properti berubah.

Ketika kelas ref C++/CX dibuat, memorinya diinisialisasi nol sebelum konstruktornya dipanggil; oleh karena itu semua properti diberi nilai default nol atau nullptr pada titik deklarasi.

Contoh

Contoh kode berikut menunjukkan cara mendeklarasikan dan mengakses properti. Properti pertama, Name, dikenal sebagai properti sepelekarena pengkompilasi secara otomatis menghasilkan set aksesor, get aksesor, dan penyimpanan backing.

Properti kedua, Doctor, adalah properti baca-saja karena menentukan blok properti yang secara eksplisit hanya mendeklarasikan aksesor get . Karena blok properti dideklarasikan, Anda harus secara eksplisit mendeklarasikan penyimpanan cadangan; yaitu, variabel String^ privat, doctor_. Biasanya, properti baca-saja hanya mengembalikan nilai penyimpanan backing. Hanya kelas itu sendiri yang dapat mengatur nilai penyimpanan backing, biasanya di konstruktor.

Properti ketiga, Quantity, adalah properti baca-tulis karena mendeklarasikan blok properti yang mendeklarasikan set pengakses dan get pengakses.

Aksesor set melakukan pengujian validitas yang ditentukan pengguna pada nilai yang ditetapkan. Dan tidak seperti C#, di sini nilai nama hanyalah pengidentifikasi untuk parameter di set aksesor; itu bukan kata kunci. Jika nilai tidak lebih besar dari nol, Platform::InvalidArgumentException akan dilemparkan. Jika tidak, penyimpanan backing, quantity_, diperbarui dengan nilai yang ditetapkan.

Perhatikan bahwa properti tidak dapat diinisialisasi dalam daftar anggota. Anda tentu saja dapat menginisialisasi variabel penyimpanan cadangan dalam daftar anggota.

public ref class Prescription sealed
{
private:
    Platform::String^ m_doctor;
    int quantity;
public:
    Prescription(Platform::String^ name, Platform::String^ d) : m_doctor(d)
    {
        // Trivial properties can't be initialized in member list.
        Name = name;
    }

    // Trivial property
    property Platform::String^ Name;

    // Read-only property
    property Platform::String^ Doctor
    {
        Platform::String^ get() { return m_doctor; }
    }

    // Read-write property
    property int Quantity
    {
        int get() { return quantity; }
        void set(int value)
        {
            if (value <= 0) 
            { 
                throw ref new Platform::InvalidArgumentException(); 
            }
            quantity = value;
        }
    }
};

public ref class PropertyConsumer sealed
{
private:
    void GetPrescriptions()
    {
        Prescription^ p = ref new Prescription("Louis", "Dr. Who");
        p->Quantity = 5;
        Platform::String^ s = p->Doctor;
        int32 i = p->Quantity;

        Prescription p2("JR", "Dr. Dat");
        p2.Quantity = 10;
    }
};

Baca juga

Sistem Jenis
Referensi Bahasa C++/CX
Referensi Namespace