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:
Declare um membro de estado particular do tipo apropriado.
retorná-lo quando o usuário deseja obter seu valor.
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)