Declaração de propriedade
A maneira de declarar uma propriedade em uma classe gerenciada foi alterado a partir de Managed Extensions for C++ para Visual C++ 2010.
Nas extensões gerenciadas de design, 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 seria invocá-lo como x. Esta convenção de nomenclatura e a especificação separada dos métodos reflete a implementação subjacente do tempo de execução 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 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, o que é mais semelhante do C#, o property palavra-chave é seguido do tipo da propriedade e seu nome acrescidos. O set e get métodos de acesso são colocados dentro de um bloco após o nome da propriedade. Observe que, ao contrário de C#, a assinatura do 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
};
Se os métodos de acesso da propriedade refletem os níveis de acesso distintos – como um public get e um private ou protected set, pode ser especificado um rótulo de acesso explícitas. Por padrão, o nível de acesso da propriedade reflete a do nível de acesso do delimitador. Por exemplo, na definição acima de Vector, ambos os get e set métodos são public. Para fazer a set método protected ou private, a definição poderia 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 de set/get para os três Vector coordenadas envolve três etapas:
Declare um membro de estado particular do tipo apropriado.
devolvê-lo quando o usuário deseja obter seu valor.
Atribua o novo valor.
A nova sintaxe, uma sintaxe de propriedade abreviada é disponível que automatiza o 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 de estado backstage é gerado pelo compilador, não é acessível dentro da classe, exceto por meio de acessadores set/get.