Sdílet prostřednictvím


Vlastnosti (C++/CX)

prostředí Windows Runtime typy zpřístupňují veřejná data jako vlastnosti. Klientský kód přistupuje k vlastnosti, jako je veřejný datovýmember. Interně se vlastnost implementuje jako blok, který obsahuje metodu get accessor, nastavenou metodu přístupového objektu nebo obojí. Pomocí metod přistupování můžete před načtením hodnoty nebo po načtení hodnoty provést další akce, například můžete aktivovat událost nebo provést kontroly ověření.

Poznámky

Hodnota vlastnosti je obsažena v privátní proměnné – známé jako záložní úložiště – což je stejný typ jako vlastnost. Vlastnost může obsahovat jak objekt set, který přiřadí hodnotu k záložnímu úložišti, tak přístupové objekty get, které načte hodnotu záložního úložiště. Vlastnost je jen pro čtení, pokud poskytuje pouze přístupové objekty get, jen pro zápis, pokud poskytuje pouze objekt set, a čtení/zápis (upravitelné), pokud poskytuje oba přístupové objekty.

Triviální vlastnost je vlastnost pro čtení a zápis, pro kterou kompilátor automaticky implementuje přístupové objekty a záložní úložiště. Nemáte přístup k implementaci kompilátoru. Můžete však deklarovat vlastní vlastnost a explicitně deklarovat její přístupové objekty a záložní úložiště. V rámci přístupového objektu můžete provést libovolnou logiku, kterou požadujete, například ověření vstupu pro přístup k objektu set, výpočet hodnoty z hodnoty vlastnosti, přístup k databázi nebo aktivaci události při změně vlastnosti.

Při vytvoření instance třídy ref C++/CX je jeho paměť inicializována nulou před zavolání jeho konstruktoru; proto jsou všechny vlastnosti přiřazeny výchozí hodnotu nula nebo nullptr v okamžiku deklarace.

Příklady

Následující příklad kódu ukazuje, jak deklarovat a přistupovat k vlastnosti. První vlastnost , je známý jako triviální vlastnost, Nameprotože kompilátor automaticky generuje set přístupové objekty, get přístupové objekty a záložní úložiště.

Druhá vlastnost, je jen pro čtení vlastnost, Doctorprotože určuje blok vlastností, který explicitně deklaruje pouze get přístup. Vzhledem k tomu, že je blok vlastnosti deklarován, musíte explicitně deklarovat záložní úložiště; to znamená privátní proměnná doctor_String^ . Vlastnost jen pro čtení obvykle vrací hodnotu záložního úložiště. Pouze samotná třída může nastavit hodnotu záložního úložiště, obvykle v konstruktoru.

Třetí vlastnost je vlastnost pro čtení i zápis, Quantityprotože deklaruje blok vlastností, který deklaruje přístupové set objekty i přístupové get objekty.

Přistupovací set objekt provádí test platnosti definované uživatelem na přiřazené hodnotě. A na rozdíl od jazyka C# je hodnota názvu pouze identifikátorem parametru v přístupovém objektuset. Nejedná se o klíčové slovo. Pokud hodnota není větší než nula, vyvolá se výjimka Platform::InvalidArgumentException. V opačném případě se záložní úložiště quantity_aktualizuje s přiřazenou hodnotou.

Všimněte si, že vlastnost nelze inicializovat v seznamu členů. Samozřejmě můžete inicializovat záložní proměnné úložiště v seznamu členů.

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

Viz také

Systém typů
Referenční zdroje k jazyku C++/CX
Referenční informace o oborech názvů