Compartilhar via


Declaração de propriedade

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

No design de gerenciado Extensions, cada set ou get acessador de propriedade é especificado sistema autônomo 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 dos set_ ou get_ seguido pelo nome real da propriedade (sistema autônomo visível para o usuário). Assim, um Vector fornecendo um x coordenada get propriedade seria nomeá-la get_x e o usuário poderia chamá-la sistema autônomo x. Esta convenção de nomeclatura e especificação separada dos métodos realmente reflete a implementação subjacente do tempo de execução da propriedade.Por exemplo, aqui está nosso Vector com um conjunto de propriedades de coordenada:

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 se espalha a funcionalidade associada a uma propriedade e requer que o usuário lexicalmente unificar os conjuntos de associado e obtém.Além disso, é detalhado.Na sintaxe de novo, que é mais semelhante que translation from VPE for Csharp, o property palavra-chave é seguido do tipo da propriedade e seu nome unadorned. The set e get métodos de acesso são colocados dentro de um bloco após o nome da propriedade. Observe que, diferentemente translation from VPE for Csharp, a assinatura de método de acesso é especificada.Por exemplo, eis 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
};

If the access methods of the property reflect distinct access levels – such as a publicget and a private or protectedset, an explicit access label can be specified.Por padrão, o nível de acesso da propriedade reflete que o nível de acesso delimitador.Por exemplo, na definição acima de Vector, tanto o get e set os métodos são public. Para tornar o set método protected ou private, a definição deve ser 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 adicional.Ele não se estende além da definição da propriedade para o nível de acesso delimitador dentro do qual a propriedade é definida.Na declaração acima, por exemplo, Vector::dot() é um método público.

Gravar as propriedades get/conjunto para os 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 da propriedade abreviada 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 da propriedade abreviada é que embora o estado backstage membro é gerado pelo compilador, não é acessível dentro da classe, exceto por meio de acessadores get/conjunto.

Consulte também

Conceitos

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

Referência

  property