propriedade (Extensões de Componentes C++)
Declara uma propriedade, que é uma função de membro que se comporta e é acessada como um membro de dados ou um elemento de matriz.
Todos os tempos de execução
Você pode declarar um dos seguintes tipos de propriedades.
propriedade simples
Por padrão, cria um acessador set que atribui o valor da propriedade, um acessador get que recupera o valor da propriedade e um membro de dados particular gerado por compilador que contém o valor da propriedade.bloco de propriedade
Use isso para criar definido pelo acessador get e/ou set definido pelo usuário.A propriedade será de leitura/gravação se ambos os acessadores get e set forem definidos, somente leitura se o acessador get for definido e somente gravação se somente o acessador set for definido.Você deve declarar explicitamente um membro de dados para conter o valor da propriedade.
propriedades indexadas
Um bloco de propriedade que você pode utilizar para obter e definir um valor da propriedade especificado por um ou mais índices.Você pode criar uma propriedade indexada que possua um nome de propriedade definido pelo usuário ou um nome de propriedade padrão.O nome de uma propriedade padrão de índice é o nome da classe na qual a propriedade é definida.Para declarar uma propriedade padrão, especifique a palavra-chave default em vez de um nome de propriedade.
Você deve declarar explicitamente um membro de dados para conter o valor da propriedade.Para uma propriedade indexada, o membro de dados é normalmente uma matriz ou uma coleção.
Sintaxe
property type property_name;
property type property_name {
access-modifier type get() inheritance-modifier {property_body};
access-modifier void set(type value) inheritance-modifier {property_body};
}
property type property_name[index_list] {
access-modifier type get(index_list) inheritance-modifier {property_body};
access-modifier void set(index_list, value) inheritance-modifier {property_body};
}
property type default[index_list] {
access-modifier type get(index_list) inheritance-modifier {property_body};
access-modifier void set(index_list, value) inheritance-modifier {property_body};
}
Parâmetros
type
O tipo de dados do valor da propriedade e, consequentemente, a própria propriedade.property_name
O nome da propriedade.access-modifier
Um qualificador de acesso.Os qualificadores válidos são static e virtual.Os acessadores get e set não precisam concordar com o qualificador virtual, mas devem concordar com o qualificador static.
inheritance-modifier
Um qualificador de herança.Os qualificadores válidos são abstract e sealed.index_list
Uma lista delimitada por vírgulas de um ou mais índices.Cada índice consiste em um tipo de índice, e um identificador opcional que pode ser usado no corpo do método da propriedade.value
O valor a ser atribuído à propriedade em uma operação set ou recuperado em uma operação get.property_body
O corpo do método da propriedade do acessador set ou get.O property_body pode usar a index_list para acessar o membro de dados da propriedade subjacente, ou como parâmetros no processamento definido pelo usuário.
Tempo de Execução do Windows
Para obter mais informações, consulte Propriedades (C++/CX).
Requisitos
Opção do compilador: /ZW
Common Language Runtime
Sintaxe
modifier property type property_name;
modifier property type property_name {
modifier void set(type);
modifier type get();
}
modifier property type property_name[index-list, value] {
modifier void set(index-list, value);
modifier type get(index-list);
modifier property type default[index];
}
Parâmetros
modificador
Um modificador que pode ser usado em uma declaração de propriedade ou em um método de acessador get/set.Os valores possíveis são static e virtual.tipo
O tipo do valor que é representado pela propriedade.nome_da_propriedade
Parâmetros para o método gerar; deve corresponder à assinatura do delegado.index_list
Uma lista delimitada por vírgulas de um ou mais índices, especificada entre colchetes (o operador subscrito, ([])).Para cada índice, especifique um tipo e, opcionalmente, um identificador que possa ser usado no corpo do método da propriedade.
Comentários
O primeiro exemplo de sintaxe mostra um propriedade simples, que declara implicitamente um método set e get.O compilador cria automaticamente um campo particular para armazenar o valor da propriedade.
O segundo exemplo de sintaxe mostra um bloco de propriedade, que declara explicitamente um método set e get.
O terceiro exemplo de sintaxe mostra uma propriedade de índice definida pelo cliente.Uma propriedade do índice aceita parâmetros além do valor a ser definido ou recuperado.Você deve especificar um nome para a propriedade.Ao contrário de uma propriedade simples, os métodos set e/ou get de uma propriedade do índice devem ser explicitamente definidos e você deve especificar um nome para a propriedade.
O quarto exemplo de sintaxe a seguir mostra uma propriedade padrão , que fornece acesso como de matriz a uma instância do tipo.A palavra-chave, default, serve para especificar apenas uma propriedade padrão.O nome da propriedade padrão é o nome do tipo no qual a propriedade é definida.
A palavra-chave property pode aparecer em uma classe, uma interface ou um tipo de valor.Uma propriedade pode ter uma função get (somente leitura), uma função set (somente gravação) ou ambas (leitura-gravação).
Um nome de propriedade pode não corresponder ao nome da classe gerenciada que o contém.O tipo de retorno da função getter deve corresponder ao tipo do último parâmetro de uma função setter correspondente.
Para o código do cliente, uma propriedade tem a aparência de um membro comum de dados e pode ser escrita ou lida usando a mesma sintaxe de um membro de dados.
Os métodos get e set não precisam concordar com o modificador virtual .
A acessibilidade do método get e set pode ser diferente.
A definição de um método de propriedade pode aparecer fora do corpo da classe, assim como um método comum.
O método get e o método set de uma propriedade devem concordar com o modificador static.
Uma propriedade será escalar se seus métodos get e set se ajustarem à seguinte descrição:
O método get não tem parâmetros, e tem o tipo de retorno T.
O método set tem um parâmetro do tipo T e o tipo de retorno void.
Haverá apenas uma propriedade escalar declarada em um escopo com o mesmo identificador.As propriedades escalares não podem ser sobrecarregadas.
Quando um membro de dados da propriedade for declarado, o compilador injeta um membro de dados - às vezes conhecido como “armazenamento de backup” — na classe.Entretanto, o nome do membro de dados é criado de uma forma que você não possa referenciar o membro na origem como se ele fosse um membro de dados real da classe recipiente.Use ildasm.exe para exibir os metadados para seu tipo e veja o nome gerado por compilador para o armazenamento de backup da propriedade.
A acessibilidade diferente é permitida para os métodos acessadores em um bloco de propriedade.OU seja, o método set pode ser público e o método get pode ser particular.No entanto, é um erro que um método acessador tenha uma acessibilidade menos restritiva do que está na própria declaração de propriedade.
property é uma palavra-chave contextual.Para obter mais informações, consulte Palavras-chave Contextuais (Extensões de Componentes C++).
Para obter mais informações sobre propriedades, consulte
Requisitos
Opção do compilador: /clr
Exemplos
O exemplo a seguir mostra a declaração e o uso de um membro de dados de propriedades e de um bloco de propriedade.Também mostra que um acessador de propriedade pode estar definido fora da classe.
// mcppv2_property.cpp
// compile with: /clr
using namespace System;
public ref class C {
int MyInt;
public:
// property data member
property String ^ Simple_Property;
// property block
property int Property_Block {
int get();
void set(int value) {
MyInt = value;
}
}
};
int C::Property_Block::get() {
return MyInt;
}
int main() {
C ^ MyC = gcnew C();
MyC->Simple_Property = "test";
Console::WriteLine(MyC->Simple_Property);
MyC->Property_Block = 21;
Console::WriteLine(MyC->Property_Block);
}
Saída
Consulte também
Conceitos
Extensões de componente para plataformas de tempo de execução