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 acessador set que atribui o valor da propriedade, um acessador get 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 acessadores get ou set definidos pelo usuário. A propriedade será de leitura/gravação se os acessadores get e set forem definidos, somente leitura se apenas o acessador get for definido e somente gravação se apenas o acessador set 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 retorno T.

  • O método set tem um parâmetro do tipo T e um tipo de retorno void.

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

Confira também

Extensões de componentes para .NET e UWP