Sdílet prostřednictvím


Vlastnost deklarace indexu

Syntaxe pro deklarování indexované vlastnosti byla změněna ze způsobu ze Správce rozšíření pro C++ na způsob z Visual C++ 2010.

Dvěmi hlavními nedostatky podpory Spravovaného rozšíření jazyka indexových vlastností, je neschopnost poskytovat zobrazení úrovně třídy; to znamená, že všechny indexové vlastnosti musí být pojmenovány, a tak například neexistuje žádný způsob poskytnutí spravování dolního indexu operátora, který lze použít přímo na objekt třídy Vector nebo Matrix. Druhým, méně významným nedostatkem je, že je vizuálně obtížné rozlišit vlastnost z indexové vlastnosti - počet parametrů je jediný údaj. Nakonec, indexové vlastnosti trpí stejnými problémy, jako neindexované vlastnosti – přístupy nejsou ošetřeny jako atomické jednotky, ale jsou rozděleny do jednotlivých metod. Příklad:

public __gc class Vector;
public __gc class Matrix {
   float mat[,];

public: 
   __property void set_Item( int r, int c, float value);
   __property float get_Item( int r, int c );

   __property void set_Row( int r, Vector* value );
   __property Vector* get_Row( int r );
};

Jak můžete vidět zde, indexery jsou rozlišeny pouze dodatečnými parametry, specifikovány dvěma nebo jednou dimenzí indexu. V nové syntaxi jsou indexery rozlišeny hranatou závorkou ([,]), následující za názvem indexeru a označující číslo a typ jednotlivých indexů:

public ref class Vector {};
public ref class Matrix {
private:
   array<float, 2>^ mat;

public:
   property float Item [int,int] {
      float get( int r, int c );
      void set( int r, int c, float value );
   }

   property Vector^ Row [int] {
      Vector^ get( int r );
      void set( int r, Vector^ value );
   }
};

K označení úrovně indexeru třídy, kterou lze aplikovat přímo na objekty třídy v nové syntaxi se klíčové slovo default znovu používá náhradou za explicitní jméno. Příklad:

public ref class Matrix {
private:
   array<float, 2>^ mat;

public:
   // ok: class level indexer now
   //
   //     Matrix mat …
   //     mat[ 0, 0 ] = 1; 
   //
   // invokes the set accessor of the default indexer …

   property float default [int,int] {
      float get( int r, int c );
      void set( int r, int c, float value );
   }

   property Vector^ Row [int] {
      Vector^ get( int r );
      void set( int r, Vector^ value );
   }
};

V nové syntaxi, když je výchozí indexovaná vlastnost specifikována, jsou rezervovány oba tyto názvy: get_Item a set_Item. Důvod je ten, že to jsou podkladové názvy, generované pro výchozí indexovanou vlastnost.

Všimněte si, že neexistuje jednoduchá index syntaxe, podobná jednoduché syntaxi vlastnosti.

Viz také

Koncepty

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

How to: Use Indexed Properties