Sdílet prostřednictvím


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ých get objektů nebo set přístupových objektů použijte blok vlastností. Vlastnost je čtení a zápis, pokud jsou definovány jak get set objekty, tak přístupové objekty, jen pro čtení, pokud je definován pouze get přístupový objekt, a zápis pouze v případě, že set 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 , defaultslouží 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ý typ T.

  • Metoda set má parametr typu Ta návratový typ void.

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

Viz také

Přípony komponent pro .NET a UPW