property
(C++/CLI e C++/CX)
Declara uma propriedade, que é uma função membro que se comporta e é acessada como um membro de dados ou um elemento de matriz.
Todos os runtimes
Você pode declarar um dos seguintes tipos de propriedades.
propriedade simples
Por padrão, cria um acessadorset
que atribui o valor da propriedade, um acessadorget
que recupera o valor da propriedade e um membro de dados particulares gerado pelo compilador que contém o valor da propriedade.bloco de propriedades
Use um bloco de propriedades para criar acessadoresget
ouset
definidos pelo usuário. A propriedade será de leitura/gravação se os acessadoresget
eset
forem definidos, somente leitura se apenas o acessadorget
for definido e somente gravação se apenas o acessadorset
for definido.Você precisa declarar explicitamente um membro de dados para conter o valor da propriedade.
propriedade indexada
Um bloco de propriedades que pode ser usado para obter e definir um valor de propriedade especificado por um ou mais índices.Você pode criar uma propriedade indexada que tem um nome de propriedade definido pelo usuário ou um nome de propriedade padrão. O nome de uma propriedade de índice padrão é o nome da classe na qual a propriedade está definida. Para declarar uma propriedade padrão, especifique a palavra-chave
default
, em vez de um nome de propriedade.
Declare 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 da 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
ou set
precisam concordar com o qualificador virtual
, mas precisam 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írgula de um ou mais índices. Cada índice é composto por 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 index_list
para acessar o membro de dados da propriedade subjacente, ou como parâmetros em processamento definido pelo usuário.
Windows Runtime
Saiba mais em 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
modifier
Um modificador que pode ser usado na declaração de propriedade ou em um método de acessador get/set. Os valores possíveis são static
e virtual
.
type
O tipo do valor que é representado pela propriedade.
property_name
Os parâmetros para o método raise
precisam corresponder à assinatura do delegado.
index_list
Uma lista delimitada por vírgula de um ou mais índices, especificados em colchetes (o operador subscrito, []
). Para cada índice, especifique um tipo e, opcionalmente, um identificador que pode ser usado no corpo do método da propriedade.
Comentários
O primeiro exemplo de sintaxe mostra uma simple property que declara implicitamente os métodos 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 propriedades que declara implicitamente os métodos set
e get
.
O terceiro exemplo de sintaxe mostra uma propriedade de índice definida pelo cliente. Uma propriedade de índice usa parâmetros, além do valor a ser definido ou recuperado. Especifique um nome para a propriedade. Ao contrário de uma propriedade simples, os métodos set
e get
de uma propriedade de índice devem ser definidos explicitamente, portanto, você precisa especificar um nome para a propriedade.
O quarto exemplo de sintaxe mostra uma propriedade default que fornece acesso de matriz a uma instância do tipo. A palavra-chave default
serve apenas para especificar uma propriedade padrão. O nome da propriedade padrão é o nome do tipo no qual a propriedade está definida.
A palavra-chave property
pode aparecer em uma classe, interface ou 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).
O nome da propriedade pode não corresponder ao nome da classe gerenciada que a 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 de dados comum, e pode ser gravada ou lida usando a mesma sintaxe que 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 diferir.
A definição de um método de propriedade pode aparecer fora do corpo de classe, assim como um método comum.
Os métodos get
e set
de uma propriedade devem concordar com o modificador static
.
Uma propriedade será escalar se os respectivos métodos get
e set
aceitarem a seguinte descrição:
O método
get
não tem parâmetros e tem o tipo de retornoT
.O método
set
tem um parâmetro do tipoT
e um tipo de retornovoid
.
Deve haver apenas uma propriedade escalar declarada em um escopo com o mesmo identificador. Propriedades escalares não podem ser sobrecarregadas.
Quando um membro de dados de propriedade é declarado, o compilador injeta um membro de dados, às vezes chamado de "repositório de backup", na classe. No entanto, o nome do membro de dados está em um formato no qual não é possível referenciar o membro na fonte, como se fosse um membro de dados real da classe recipiente. Use ildasm.exe para exibir os metadados de seu tipo e ver o nome gerado pelo compilador do repositório de backup da propriedade.
Há permissão para uma acessibilidade diferente nos métodos acessadores em um bloco de propriedades. Ou seja, o método set
pode ser public
e o método get
pode ser private
. No entanto, é um erro um método acessador ter uma acessibilidade menos restritiva do que está na declaração da propriedade em si.
property
é uma palavra-chave contextual. Saiba mais em Palavras-chave contextuais.
Requisitos
Opção do compilador: /clr
Exemplos
O exemplo a seguir mostra a declaração e uso de um membro de dados de propriedade e um bloco de propriedade. Também mostra que um acessador de propriedade pode ser 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);
}
test
21