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

Dúvida sobre encapsulamento

Boa noite!

Qual seria a diferença de usar:

"public string Cpf { get; set; }"

E usar:

"public string Cpf { get { return _cpf; } set { this._cpf = value; } }"

Pelo que entendi, ambos permitem que utilizemos a propriedade CPF tanto para leitura quanto para alterar o valor contido nela.

3 respostas

Não sou especialista em C#, mas acho que a diferença é apenas que no primeiro modo você vai acabar com um atributo com o nome padrão e no segundo você tem um nome customizado.

solução!

Considere que a Property é o que chamamos de "acessor", pois a responsabilidade dela é apenas proteger a entrada e saída dos seus fields (campos). Ao longo do seu código voce usará os valores salvos no seu field, e na property você pode adicionar além da proteção do encapsulamento (private set), também validações como no exemplo abaixo:

string _cpf = "000.000.000-00";

public string Cpf {
get{ return _cpf;  } 
set {
 if(value == "")
    throw new Exception("Não pode atribuir um CPF vazio.");
if(value.Length > 11)
    throw new Exception("Cpf não pode ter mais de 11 dígitos");

_cpf = value;
}
}

Você pode "proteger" melhor sua Propertie armazenando seu valor em uma field. Isso faz com que o valor da sua propriedade fique mais seguro, podendo ser controlado apenas dentro da classe e permitindo tratativas exclusivas.