2
respostas

Diferença entre propriedade apenas get e propriedade com private set

Olá, eu estou seguindo os cursos de C# da Alura (excelentes, por sinal, parabéns pela qualidade e clareza da explicação) e me surgiu uma dúvida.

Eu estou usando o Visual Studio 2017 com o plugin ReSharper, da JetBrains, já que tenho licença de estudante com a mesma. Sempre que eu defino uma propriedade com setter privado (public int propriedade {get; private set;} o resharper recomenda trocar essa propriedade por uma "get only":

public int propriedade {get;}

Pois bem, qual é a diferença prática dessas duas propriedades? Em ambas eu consigo atribuir um valor para a mesma no construtor da classe, então qual é a diferença prática de um private set na propriedade?

2 respostas

Bom dia Bruno, uma propriedade com SET privado você pode setar o valor em outros pontos da classe, mas o GET only só pode ser setado no construtor. O Visual Studio transforma o GET only em Read Only por traz do código (code behind).

Fala, Bruno, bom dia.

A diferença prática é a seguinte: com os private setters você consegue atribuir valores para a propriedade em qualquer lugar da classe. Sem eles, só no construtor.

É isso! Exemplo: veja as classes Pessoa e a classe Conta abaixo:

class Pessoa
{
  public string Nome { get; }
  public Pessoa(string nome) 
  {
    Nome = nome;
  }
  public void MudouDeNomeNoCartorio(string nome)
  {
    Nome = nome; //erro de compilação porque declaramos a propriedade como um getter sem setter
  }
}

class Conta 
{
  public double Saldo {  get; private set; }
  public Conta()
  {
    Saldo = 10.0; //ah, se todos os bancos fossem assim! rsrs
  }
  public void Deposita(double valor)
  {
    Saldo += valor; // aqui e em qualquer método de Conta pode porque usamos um private setter
  }
}

Obrigado pelo reconhecimento e confiança na Alura!

Abraço e bons estudos, Daniel