property
(C++/CLI a C++/CX)
Deklaruje vlastnost, což je členová funkce, která se chová a je přístupná jako datový člen nebo prvek pole.
Všechny moduly runtime
Můžete deklarovat jeden z následujících typů vlastností.
jednoduchá vlastnost
Ve výchozím nastavení vytvoříset
přístup, který přiřadí hodnotu vlastnosti,get
přístupový objekt, který načte hodnotu vlastnosti, a člen generovaný kompilátorem privátních dat, který obsahuje hodnotu vlastnosti.blok vlastností
K vytvoření uživatelem definovanýchget
objektů neboset
přístupových objektů použijte blok vlastností. Vlastnost je čtení a zápis, pokud jsou definovány jakget
set
objekty, tak přístupové objekty, jen pro čtení, pokud je definován pouzeget
přístupový objekt, a zápis pouze v případě, žeset
je definován pouze přístupový objekt.Musíte explicitně deklarovat datový člen, který bude obsahovat hodnotu vlastnosti.
indexovaná vlastnost
Blok vlastností, který můžete použít k získání a nastavení hodnoty vlastnosti určené jedním nebo více indexy.Můžete vytvořit indexovanou vlastnost, která má buď uživatelsky definovaný název vlastnosti, nebo výchozí název vlastnosti. Název výchozí vlastnosti indexu je název třídy, ve které je vlastnost definována. Chcete-li deklarovat výchozí vlastnost, zadejte
default
klíčové slovo místo názvu vlastnosti.
Explicitně deklarujte datový člen, který bude obsahovat hodnotu vlastnosti. U 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 samotné vlastnosti.
property_name
Název vlastnosti
access-modifier
Kvalifikátor přístupu. Platné kvalifikátory jsou static
a virtual
.
Přístupné get
set
objekty nemusí souhlasit s kvalifikátorem virtual
, ale musí souhlasit s kvalifikátorem static
.
inheritance-modifier
Kvalifikátor dědičnosti. Platné 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á se má přiřadit k vlastnosti v set
operaci, nebo načíst v get
operaci.
property_body
Tělo metody vlastnosti nebo get
přístupového objektuset
. Může property_body
použít index_list
přístup k datovému členu podkladové vlastnosti nebo jako parametry v uživatelsky definovaném zpracování.
prostředí Windows Runtime
Další informace naleznete v tématu Vlastnosti (C++/CX).
Požadavky
Možnost kompilátoru: /ZW
CLR (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, který lze použít pro deklaraci vlastnosti nebo metodu get/set accessor. Možné hodnoty jsou static
a virtual
.
type
Typ hodnoty reprezentované vlastností.
property_name
Parametry pro metodu raise
; musí odpovídat podpisu delegáta.
index_list
Čárkami oddělený seznam jednoho nebo více indexů zadaných v hranatých závorkách (operátor dolního indexu). []
Pro každý index zadejte typ a volitelně identifikátor, který lze použít v těle metody vlastnosti.
Poznámky
První příklad syntaxe ukazuje jednoduchou vlastnost, která implicitně deklaruje jak metoduget
, tak i metoduset
. Kompilátor automaticky vytvoří soukromé pole pro uložení hodnoty vlastnosti.
Druhý příklad syntaxe ukazuje blok vlastnosti, který explicitně deklaruje jak metoduget
, tak i metoduset
.
Třetí příklad syntaxe ukazuje vlastnost indexu definovanou zákazníkem. Vlastnost indexu přebírá parametry kromě hodnoty, která se má nastavit nebo načíst. Zadejte název vlastnosti. Na rozdíl od jednoduché vlastnosti set
musí být explicitně definovány metody get
vlastnosti indexu, takže je nutné zadat název vlastnosti.
Čtvrtý příklad syntaxe ukazuje výchozí vlastnost, která poskytuje přístup podobný poli k instanci typu. Klíčové slovo , default
slouží pouze k určení výchozí vlastnosti. Název výchozí vlastnosti je název typu, ve kterém je vlastnost definována.
Klíčové property
slovo se může zobrazit ve třídě, rozhraní nebo typu hodnoty. Vlastnost může mít get
funkci (jen pro čtení), set
funkci (jen pro zápis) nebo obojí (čtení i zápis).
Název vlastnosti nemůže odpovídat názvu spravované třídy, která ji obsahuje. Návratový typ funkce getter musí odpovídat typu posledního parametru odpovídající funkce setter.
Pro klientský kód má vlastnost vzhled běžného datového členu a lze ji zapsat nebo číst ze stejné syntaxe jako datový člen.
set
Metody get
a metody nemusí souhlasit s modifikátoremvirtual
.
Přístupnost metody a set
přístupnosti get
se může lišit.
Definice metody vlastnosti se může objevit mimo tělo třídy, stejně jako běžná metoda.
Modifikátor get
a set
způsob majetku static
se shodují.
Vlastnost je skalární, pokud její get
a set
metody odpovídají následujícímu popisu:
Metoda
get
nemá žádné parametry a má návratový typT
.Metoda
set
má parametr typuT
a návratový typvoid
.
V oboru se stejným identifikátorem je deklarována pouze jedna skalární vlastnost. Skalární vlastnosti nelze přetížit.
Když je deklarován datový člen vlastnosti, kompilátor vloží do třídy datový člen , který se někdy označuje jako "záložní úložiště". Název datového členu je však formulář, který nemůže odkazovat na člena ve zdroji, jako by se jednalo o skutečný datový člen obsahující třídy. Pomocí ildasm.exe můžete zobrazit metadata vašeho typu a zobrazit název vygenerovaný kompilátorem pro záložní úložiště vlastnosti.
Pro metody přistupování v bloku vlastností je povolená jiná přístupnost. To znamená, že set
metoda může být public
a metoda get
může být private
. Jedná se ale o chybu, že metoda přístupového objektu má méně omezující přístupnost, než jaká je u deklarace samotné vlastnosti.
property
je kontextově citlivé klíčové slovo. Další informace najdete v tématu Klíčová slova citlivá na kontext.
Požadavky
Možnost kompilátoru: /clr
Příklady
Následující příklad ukazuje deklaraci a použití datového členu vlastnosti a bloku vlastnosti. Ukazuje také, že přístupové objekty vlastností 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);
}
test
21