property (rozšíření komponent C++)
Deklaruje vlastnost, což je členská funkce, která se chová a je přístupná jako datový člen nebo prvek pole.
Všechny moduly runtime
Lze deklarovat jeden z následujících typů vlastností.
jednoduchá vlastnost
Automaticky vytváří přístupový objekt set přiřazující vlastnosti hodnotu, přístupový objekt get načítající hodnotu vlastnosti a kompilátorem generovaný soukromý datový člen obsahující hodnotu vlastnosti.blok vlastností
Blok vlastností použijte pro tvorbu uživatelsky definovaných přístupových objektů get a/nebo set.Vlastnost je k dispozici pro čtení i zápis, jsou-li oba přístupové objekty definovány, pouze pro čtení, je-li definován pouze objekt get a pouze pro zápis, je-li definován pouze objekt set.Je zapotřebí explicitně deklarovat datový člen, který bude obsahovat hodnotu vlastnosti.
indexovaná vlastnost
Blok vlastností, který lze použít pro načítání a nastavení hodnoty vlastnosti určené jedním nebo více indexy.Lze vytvořit indexovanou vlastnost pojmenovanou buď uživatelsky definovaným nebo výchozím názvem.Názvem výchozí indexované vlastnosti je název třídy, v níž je vlastnost definována.Chcete-li deklarovat výchozí vlastnost, zadejte místo názvu vlastnosti klíčové slovo default.
Je zapotřebí explicitně deklarovat datový člen, který bude obsahovat hodnotu vlastnosti.V případě indexované vlastnosti je datový člen obvykle pole nebo kolekce.
Syntaxe
property type property_name;
property type property_name {
access-modifier type get() inheritance-modifier {property_body};
access-modifier void set(type value) inheritance-modifier {property_body};
}
property type property_name[index_list] {
access-modifier type get(index_list) inheritance-modifier {property_body};
access-modifier void set(index_list, value) inheritance-modifier {property_body};
}
property type default[index_list] {
access-modifier type get(index_list) inheritance-modifier {property_body};
access-modifier void set(index_list, value) inheritance-modifier {property_body};
}
Parametry
type
Datový typ hodnoty vlastnosti, a tím tedy i vlastnosti samotné.property_name
Název vlastnosti.access-modifier
Kvalifikátor přístupu.Platnými kvalifikátory jsou static a virtual.U přístupových objektů nemusí být shodný kvalifikátor virtual, kvalifikátor static se však shodovat musí.
inheritance-modifier
Kvalifikátor dědičnosti.Platnými kvalifikátory jsou abstract a sealed.index_list
Čárkami oddělený seznam jednoho nebo více indexů.Každý index se skládá z typu indexu a volitelného identifikátoru, který lze použít v těle metody vlastnosti.value
Hodnota, která bude přiřazena vlastnosti v operaci set, nebo načtena z vlastnosti v operaci get.property_body
Tělo metody přístupových objektů get a set ve vlastnosti.Parametr property_body může využít parametr index_list pro přístup k příslušnému datovému členu vlastnosti nebo jako parametry v uživatelsky definovaném zpracováním.
Windows Runtime
Další informace naleznete v tématu týkajícím se vlastností (C++/CX).
Požadavky
Možnost kompilátoru: /ZW
Common Language Runtime
Syntaxe
modifier property type property_name;
modifier property type property_name {
modifier void set(type);
modifier type get();
}
modifier property type property_name[index-list, value] {
modifier void set(index-list, value);
modifier type get(index-list);
modifier property type default[index];
}
Parametry
modifier
Modifikátor použitelný buď v deklaraci vlastnosti nebo v přístupové metodě get/set.Možnými hodnotami jsou static a virtual.type
Typ hodnoty reprezentované vlastností.property_name
Parametr(y) metody raise; musí se shodovat se signaturou delegáta.index_list
Čárkami oddělený seznam jednoho nebo více indexů zadaný v hranatých závorkách (operátor dolního indexu, ([])).Pro každý index zadejte typ a volitelně identifikátor použitelný v těle metody vlastnosti.
Poznámky
První příklad syntaxe ukazuje jednoduchou vlastnost, která implicitně deklaruje metodu set i get.Kompilátor automaticky vytváří soukromé pole pro uložení hodnoty vlastnosti.
Druhý příklad syntaxe ukazuje blok vlastností, který explicitně deklaruje metodu set i get.
Třetí příklad syntaxe ilustruje uživatelsky definovanou indexovanou vlastnost.Krom hodnoty k načtení nebo uložení přebírá indexovaná vlastnost také parametry.Je nutné zadat název vlastnosti.Na rozdíl od jednoduché vlastnosti musí být metody set a/nebo get indexované vlastnosti explicitně definovány a je zapotřebí zadat název vlastnosti.
Čtvrtý příklad syntaxe demonstruje výchozí vlastnost, která poskytuje přístup k instanci typu podobný přístupu k poli.Klíčové slovo default slouží pouze k určení výchozí vlastnosti.Názvem výchozí vlastnosti je název typu, v níž je vlastnost definována.
Klíčové slovo property může být zadáno ve třídě, v rozhraní nebo v typu hodnoty.Vlastnost může mít funkci get (jen pro čtení), funkci set (jen pro zápis) nebo obě (čtení i zápis).
Název vlastnosti se nesmí shodovat s názvem spravované třídy, která vlastnost obsahuje.Návratový typ funkce get se musí shodovat s typem posledního parametru odpovídající funkce set.
V klientském kódu se vlastnost jeví jako běžný datový člen a lze do ni zapisovat nebo z ní číst pomocí stejné syntaxe, jako pro datový člen.
Metody get a set se nemusí shodovat v použití modifikátoru virtual.
Přístupnosti k metodám get a set se mohou lišit.
Definice metody vlastnosti se stejně jako u běžných metod mohou vyskytovat mimo tělo třídy.
Metody get a set se musí shodovat na použití modifikátoru static.
Vlastnost je skalární, pokud jeho metody get a set splňují následující popis:
Metoda get nepřijímá žádné parametry a má návratový typ T.
Metoda set má parametr typu T a návratový typ void.
V oboru stejného identifikátoru může být deklarována pouze jedna skalární vlastnost.Skalární vlastnosti nelze přetížit.
Při deklaraci datového členu vlastnosti vloží kompilátor datový člen - někdy označován jako "záložní úložiště" - do třídy.Název datového členu má však formu znemožňující odkázat se na člen ze zdrojového kódu způsobem běžným pro skutečné datové členy třídy, která je obsahuje.Chcete-li zobrazit metadata typu a kompilátorem generovaný název záložního úložiště vlastnosti, použije nástroj ildasm.exe.
V bloku vlastností je povolena odlišnost přístupnosti mezi přístupovými metodami.To znamená, že metoda set může být veřejná a metoda get soukromá.Je však chybou, pokud má přístupová metoda méně omezující přístupnost než jaká je určena deklarací vlastnosti samotné.
Klíčové slovo property je citlivé na kontext.Další informace naleznete v tématu Kontextově závislá klíčová slova (rozšíření komponent C++).
Další informace o vlastnostech naleznete v tématech
Požadavky
Možnost kompilátoru: /clr
Příklady
Následující příklad ukazuje deklaraci a používání datového členu vlastnosti a bloku vlastností.Ukazuje také, že přístupový objekt vlastnosti lze definovat mimo třídu.
// mcppv2_property.cpp
// compile with: /clr
using namespace System;
public ref class C {
int MyInt;
public:
// property data member
property String ^ Simple_Property;
// property block
property int Property_Block {
int get();
void set(int value) {
MyInt = value;
}
}
};
int C::Property_Block::get() {
return MyInt;
}
int main() {
C ^ MyC = gcnew C();
MyC->Simple_Property = "test";
Console::WriteLine(MyC->Simple_Property);
MyC->Property_Block = 21;
Console::WriteLine(MyC->Property_Block);
}
Výsledek