Li a resposta do instrutor no tópico passado aberto por um colega, perguntei a Luri, mas ainda não ficou claro a diferença entre utilizar o campo privado e uma propriedade com private set.
Pergunta para a Luri:
Qual a diferença entre utilizar um campo privado salario e utilizar a propriedade Salario com um private set?
Resposta da Luri
A diferença principal é que, ao usar um campo privado salario, você tem controle total sobre como o valor é alterado, permitindo validações e lógicas extras no método ReajustarSalario. Já com uma propriedade Salario com private set, a alteração ainda seria controlada, mas de uma forma mais direta, sem a necessidade de um método intermediário para validação.
Utilizei o código abaixo e foi produzido o mesmo efeito do código Opinião do Instrutor. Entendo que foi mantido o encapsulamento (o salário só pode ser alterado através do método ReajustarSalario e a validação é feita da mesma forma.
Talvez exista algum edge case que eu não estou a enxergar, mas em todas as consultas que fiz, vejo que as duas formas tem o mesmo efeito.
namespace praticandoCSharp;
internal class Funcionario
{
//private double _salario;
public Funcionario(string nome, double salarioInicial)
{
Salario = salarioInicial;
Nome = nome;
}
public string Nome { get; }
public double Salario { get ; private set; }
public void ReajustarSalario(double novoSalario)
{
if (Salario < novoSalario)
{
Salario = novoSalario;
Console.WriteLine($"Funcionário: {Nome}");
Console.WriteLine($"Slário atual: {Salario}");
}
else { Console.WriteLine("Erro: O novo salário deve ser maior que o atual."); }
}
}