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, Name
protož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, Doctor
protož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, Quantity
protož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ů