Partilhar via


Declaração de índice da propriedade

A sintaxe para declarar uma propriedade indexada foi alterado a partir de Managed Extensions for C++ para Visual C++ 2010.

Dois a principal desvantagem do suporte a idioma de Managed Extensions de propriedades indexadas é a incapacidade de fornecer o nível de classe subscripting; ou seja, todas as propriedades indexadas são necessárias para ser atribuído um nome e, portanto, não é possível, por exemplo, para fornecer um operador de subscrito gerenciado que pode ser aplicado diretamente a uma Vector ou Matrix classe de objeto. Um segundo menos significativo desvantagem é que é difícil distinguir uma propriedade de uma propriedade indexada visualmente – o número de parâmetros é a única indicação. Finalmente, propriedades indexadas sofrem com os mesmos problemas, como as propriedades não-indexados – os acessadores não são tratados como uma unidade atômica, mas separados em métodos individuais. For example:

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

Como você pode ver, os indexadores são diferenciados apenas pelos parâmetros adicionais para especificar um, dois ou um único índice de dimensão. Na sintaxe de novo, os indexadores distinguem-se ao lado do colchete (,) após o nome do indexador e indicando o número e tipo de cada índice:

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

Para indicar um indexador de nível de classe pode ser aplicado diretamente a objetos da classe na sintaxe de novo, o default palavra-chave é reutilizada para substituir nome explícito. For example:

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

Na sintaxe de novo, quando a propriedade Indexado de padrão é especificada, os dois seguintes nomes são reservados: get_Item and set_Item. Isso ocorre porque esses são os nomes subjacentes gerados para a propriedade Indexado de padrão.

Observe que nenhuma sintaxe de índice simples é análogo para a sintaxe da propriedade simples.

Consulte também

Conceitos

Declarações de membro dentro de uma classe ou Interface

How to: Use Indexed Properties