Compartilhar via


Declaração do índice de propriedade

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

Dois a principal desvantagem do suporte a idioma extensões gerenciadas de propriedades indexadas é a incapacidade de fornecer o nível de classe subscripting; ou seja, todas as propriedades indexadas são necessárias para receber um nome e, portanto, não é possível, por exemplo, para fornecer um operador subscrito gerenciado que pode ser aplicado diretamente a uma Vector ou Matrix o objeto de classe.Um segundo menos significativa 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-indexado – os acessadores não são tratados como uma unidade atômica, mas separados em métodos individuais.Por exemplo:

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 são diferenciados por 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 que pode ser aplicado diretamente a objetos da classe na nova sintaxe, a default palavra-chave é reutilizado para substituir um nome explícito.Por exemplo:

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 o padrão indexados propriedade for especificada, os dois seguintes nomes são reservados: get_Item e set_Item.Isso ocorre porque esses são os nomes subjacentes gerados para a propriedade indexado.

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

Consulte também

Conceitos

Declarações de membro em uma classe ou uma interface (C++/CLI)

Como usar propriedades indexadas