Sdílet prostřednictvím


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.

es7h5kch.collapse_all(cs-cz,VS.110).gifSyntaxe

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

es7h5kch.collapse_all(cs-cz,VS.110).gifParametry

  • 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).

es7h5kch.collapse_all(cs-cz,VS.110).gifPož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

es7h5kch.collapse_all(cs-cz,VS.110).gifPožadavky

Možnost kompilátoru: /clr

es7h5kch.collapse_all(cs-cz,VS.110).gifPří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

  
  

Viz také

Koncepty

Součást rozšíření pro Runtime platformy