Compartilhar via


Declaração de propriedade

A maneira de declarar uma propriedade em uma classe gerenciada foi alterado de Managed Extensions for C++ para Visual C++.

Em extensões gerenciadas projetar cada set ou get acessador de propriedade é especificado como um método independente.A declaração de cada método é prefixada com o __property palavra-chave.O nome do método começa com um set_ ou get_ seguido do nome real da propriedade (como visível para o usuário).Assim, um Vector fornecendo um x coordenar get propriedade seria o nome get_x e o usuário deseja invocar como x.Esta convenção de nomenclatura e especificação separada dos métodos realmente reflete a implementação de tempo de execução subjacente da propriedade.Por exemplo, aqui está nosso Vector com um conjunto de propriedades de coordenadas:

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

Isso espalha a funcionalidade associada a uma propriedade e requer que o usuário unificar lexicalmente associado define e obtém.Além disso, é detalhado.Na sintaxe de novo, que é mais semelhante a do C#, o property palavra-chave é seguido pelo tipo da propriedade e seu nome acrescido.O set e get métodos de acesso são colocados dentro de um bloco após o nome da propriedade.Observe que, diferentemente de C#, a assinatura do método de acesso é especificada.Por exemplo, aqui está o exemplo de código acima traduzido para a nova sintaxe.

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

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

Se os métodos de acesso da propriedade refletem os níveis de acesso distintos – como um publicget e um private ou protectedset, um rótulo de acesso explícitas pode ser especificado.Por padrão, o nível de acesso da propriedade reflete que o nível de acesso de delimitador.Por exemplo, na definição acima de Vector, tanto o get e set métodos são public.Para fazer o set método protected ou private, a definição seria revisada da seguinte maneira:

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

O escopo de uma palavra-chave de acesso dentro de uma propriedade se estende até a chave de fechamento da propriedade ou a especificação de uma palavra-chave de acesso adicionais.Ele não se estende além da definição da propriedade para o nível de acesso circunscrito dentro do qual a propriedade é definida.Na declaração acima, por exemplo, Vector::dot() é um método público.

Gravar as propriedades get/conjunto de três Vector coordenadas envolve três etapas:

  1. Declare um membro de estado particular do tipo apropriado.

  2. retorná-lo quando o usuário deseja obter seu valor.

  3. Atribua o novo valor.

Na sintaxe de novo, uma sintaxe abreviada da propriedade está disponível que automatiza esse padrão de uso:

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

O efeito colateral interessante da sintaxe de propriedade abreviada é que embora o membro estado backstage é gerado pelo compilador, não é acessível dentro da classe, exceto através de acessadores get/set.

Consulte também

Referência

propriedade (Extensões de Componentes C++)

Conceitos

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