Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Os tipos do Tempo de Execução do Windows expõem dados públicos como propriedades. O código do cliente acessa a propriedade como um datamember público. Internamente, a propriedade é implementada como um bloco que contém um método get accessor, um método set accessor ou ambos. Usando os métodos de acessador, você pode executar ações adicionais antes ou depois de recuperar o valor, por exemplo, você pode disparar um evento ou executar verificações de validação.
Observações
O valor de uma propriedade está contido em uma variável privada, conhecida como armazenamento de suporte, que é do mesmo tipo que a propriedade. Uma propriedade pode conter um acessador definido, que atribui um valor ao repositório de backup, e um acessor get que recupera o valor do repositório de backup. A propriedade é somente leitura se fornecer apenas um acessor get, somente gravação se fornecer apenas um acessador definido e leitura/gravação (modificável) se fornecer ambos os acessadores.
Uma propriedade trivial é uma propriedade de leitura/gravação para a qual o compilador implementa automaticamente os acessadores e o armazenamento de backup. Você não tem acesso à implementação do compilador. No entanto, você pode declarar uma propriedade personalizada e declarar explicitamente seus acessadores e armazenamento de suporte. Dentro de um acessador, você pode executar qualquer lógica necessária, como validar a entrada para o acessador definido, calcular um valor a partir do valor da propriedade, acessar um banco de dados ou disparar um evento quando a propriedade for alterada.
Quando uma classe ref C++/CX é instanciada, sua memória é inicializada a zero antes de seu construtor ser chamado; Portanto, todas as propriedades recebem um valor padrão de zero ou nullptr no ponto da declaração.
Exemplos
O exemplo de código a seguir mostra como declarar e acessar uma propriedade. A primeira propriedade, Name, é conhecida como uma propriedade trivial porque o compilador gera automaticamente um set acessador, get acessador e um armazenamento de backup.
A segunda propriedade, Doctor, é uma propriedade somente leitura porque especifica um bloco de propriedades que declara explicitamente apenas um get acessador. Como o bloco de propriedades é declarado, você deve declarar explicitamente um armazenamento de suporte; ou seja, a variável privada String^, doctor_. Normalmente, uma propriedade somente leitura retorna apenas o valor do armazenamento de backup. Somente a própria classe pode definir o valor do armazenamento de suporte, normalmente no construtor.
A terceira propriedade, Quantity, é uma propriedade de leitura-gravação porque declara um bloco de propriedades que declara um set acessador e um get acessador.
O set acessador executa um teste de validade definido pelo usuário no valor atribuído. E, ao contrário do C#, aqui o valor do nome é apenas o identificador do parâmetro no set acessador, não é uma palavra-chave. Se o valor não for maior que zero, Platform::InvalidArgumentException será lançado. Caso contrário, o armazenamento de suporte, quantity_, será atualizado com o valor atribuído.
Observe que uma propriedade não pode ser inicializada em uma lista de membros. É claro que você pode inicializar variáveis de armazenamento de suporte em uma lista de membros.
public ref class Prescription sealed
{
private:
Platform::String^ m_doctor;
int quantity;
public:
Prescription(Platform::String^ name, Platform::String^ d) : m_doctor(d)
{
// Trivial properties can't be initialized in member list.
Name = name;
}
// Trivial property
property Platform::String^ Name;
// Read-only property
property Platform::String^ Doctor
{
Platform::String^ get() { return m_doctor; }
}
// Read-write property
property int Quantity
{
int get() { return quantity; }
void set(int value)
{
if (value <= 0)
{
throw ref new Platform::InvalidArgumentException();
}
quantity = value;
}
}
};
public ref class PropertyConsumer sealed
{
private:
void GetPrescriptions()
{
Prescription^ p = ref new Prescription("Louis", "Dr. Who");
p->Quantity = 5;
Platform::String^ s = p->Doctor;
int32 i = p->Quantity;
Prescription p2("JR", "Dr. Dat");
p2.Quantity = 10;
}
};
Ver também
Sistema de tipo
Referência da linguagem C++/CX
Referência de namespaces