Sdílet prostřednictvím


Vlastnost deklarace

Způsob deklarace vlastnosti ve spravované třídě byl změněn ze spravovaného rozšíření jazyka C++ do Visual C++ 2010.

V návrhu spravováno rozšíření je každá vlastnost přistupujícího objektu set nebo get určena jako nezávislá metoda. Deklarace každé metody je předponou s klíčovým slovem __property. Název metody začíná buď set_ nebo get_ následován skutečným názvem vlastnosti (jako viditelné pro uživatele). Proto Vector poskytuje souřadnici x, vlastnost get může být pojmenována get_x a uživatel by ji měl vyvolat jako x. Tuto zásadu vytváření názvů a samostatná specifikace metod aktuálně odráží podkladové spuštění implementace vlastnosti. Například je zde naše Vector s nastavením souřadnice vlastností:

public __gc __sealed class Vector {
public:
   __property double get_x(){ return _x; }
   __property double get_y(){ return _y; }
   __property double get_z(){ return _z; }

   __property void set_x( double newx ){ _x = newx; }
   __property void set_y( double newy ){ _y = newy; }
   __property void set_z( double newz ){ _z = newz; }
};

To rozkládá funkci, asociovanou s vlastností a vyžaduje, aby uživatel lexikálně sjednotil asociované funkce set a get. Navíc je to komentář. V nové syntaxi, což je více než u jazyka C#, klíčové slovo property je následováno typem vlastnosti a jeho prostým názvem. Přístupové metody set a get jsou umístěny v rámci následujícího bloku názvu vlastnosti. Všimněte si, že narozdíl od jazyka C#,jce uvedena signatura přístupové metody. Například, zde je kód výše uvedeného příkladu přeložen do nové syntaxe.

public ref class Vector sealed { 
public:
   property double x {
      double get() {
         return _x;
      }

      void set( double newx ) {
         _x = newx;
      }
   } // Note: no semi-colon
};

Pokud přístupový metoda vlastnosti reflektuje odlišně úrovně přístupu – například jako public get a private nebo protected setmůže být určen explicitní přístup popisku. Ve výchozím nastavení je úroveň přístupu odpovídající vlastností, která ohraničuje úroveň přístupu. Například ve výše uvedené definici Vector, je jak metoda get, tak metoda set public. Chcete-li, aby byla metoda set protected nebo private, definice mě měly být upravena takto:

public ref class Vector sealed { 
public:
   property double x {
      double get() {
         return _x;
      }

   private:
      void set( double newx ) {
         _x = newx;
      }

   } // note: extent of private culminates here …

// note: dot is a public method of Vector
double dot( const Vector^ wv );

// etc.
};

Rozsah přístupu klíčového slova v rámci vlastnosti rozšiřuje dokud každá složená závorka vlastnosti nebo specifikace dalšího přístupu klíčového slova. Nerozšiřuje mimo definici vlastnosti k ohraničení úrovně přístupu, v níž je vlastnost definována. Ve výše uvedené deklaraci, například Vector::dot() je veřejná metoda.

Zapisování vlastností set/get pro tři souřadnice Vector zahrnuje tři kroky:

  1. deklarovat soukromý členský stav příslušného typu.

  2. vrátit to, pokud si uživatel přeje získat jeho hodnotu.

  3. přiřadit to nové hodnotě.

V nové syntaxy je k dispozici sdružená vlastnost syntaxe, která automatizuje tento vzorek využití:

public ref class Vector sealed { 
public:
   // equivalent shorthand property syntax
   property double x; 
   property double y;
   property double z;
};

Zajímavá strana účinku sdružené vlastnosti syntaxe je, že ačkoli členský stav backstage je generován kompilátorem, není přístupná v rámci třídy s výjimkou prostřednictvím přístupových objektů set/get.

Viz také

Odkaz

property

Koncepty

Členské deklarace v rámci třídy nebo rozhraní