Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Dúvida em Propriedades Customizadas na Classe

Olá,

Estou bastante interessado e entusiasmado para aprender C# e No Exercício 7 da Aula 1 do C# II abordaram as Propriedades Customizadas. O problema que estou tendo é entender o por quê e a utilidade desse código que fizeram no exercício para exemplificar:

class Cliente
{
    private string cpf;
    public string Cpf {
        get
        {
            return cpf;
        }
        set
        {
            this.cpf = value;
        }
    }
}

Eu juro que não consegui entender o por quê de fazer essa customização. Ué, criar uma propriedade para ler uma variável? Para isso não poderíamos ter feito isso:

private string cpf { public get; set; }

E depois na segunda parte (set), eles quiseram fazer o que ali? Bom, se a função de colocar a variável cpf como private é não permitir que em outro lugar do código possam mudar o valor dela, porque criaram uma propriedade que permite fazer isso em qualquer lugar do código (a propriedade Cpf é public). E não consegui entender de onde tiraram aquele value.

Será que poderiam comentar este código me explicando o objetivo de criar aquela propriedade Cpf e aquela variável cpf?

3 respostas
solução!

você pode querer implementar o método apenas para customizar o comportamento.. se quiser manter o padrão, aí vc usa a construção default :). O value é o nome da variável disponibilizada pelo C# para que vc possa pegar o valor passado como argumento e trabalhar com ele.

Fala Douglas! Quando eles mostraram esse exemplo do cpf eles ensinam a fazer uma property de forma manual. As properties feitas assim são chamadas de Auto-Implemented Properties.

public string Cpf {get; set;}

O código que você postou é exatamente o código acima, só que feito de forma manual. O value é o valor passado por parâmetro quando você for setar o cpf, por exemplo:

Cliente cliente = new Cliente();
cliente.Cpf = "123456789";

O value da property é o valor entre aspas. É o valor que você passa para o "set".

A vantagem de fazer uma property de forma manual é poder criar condições antes de colocar o valor. Por exemplo quando for colocar o valor no cpf, ele pode verificar se o cpf é válido. Exemplificando:

public string Cpf {
    set
    {
        if(ValidarCpf(value))
           this.cpf = value;
        else
        //Tratar problema
    }
 }

Se a validação do cpf passar no momento do set ele atribuirá o valor para o cpf, caso contrário você poderá tratar o problema, enviando uma mensagem ao usuário ou não atribuindo o cpf.

Espero ter ajudado. Abraço.

Bruno Rodrigues,

Muito obrigado pela explicação. Agora entendi perfeitamente.

A property é uma forma mais correta e simplificada de atribuir um valor a uma variável de uma classe e também de buscar o valor daquela variável, podendo realizar alguns tratamentos antes.

É que no exemplo dado, pareceu pra mim que era uma perca de tempo fazer tudo aquilo sendo que poderíamos fazer tudo em uma linha. Mas agora entendi a importância das properties.

Mais uma vez, muito obrigado!