1
resposta

[Dúvida] Diferença entre campo privado salario e propriedade Salario com private set.

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."); }
    }
}

Garanta sua matrícula hoje e ganhe + 2 meses grátis

Continue sua jornada tech com ainda mais tempo para aprender e evoluir

Quero aproveitar agora
1 resposta

Olá Pedro! Como vai?

A diferença entre usar um campo privado e uma propriedade com private set está principalmente na flexibilidade e no controle que você tem sobre o acesso e a modificação dos dados.

  1. Campo Privado (_salario):

    • Quando você usa um campo privado, como _salario, você tem controle total sobre como e quando o valor é alterado. Isso significa que você pode implementar qualquer lógica de validação ou cálculo diretamente dentro dos métodos que acessam ou modificam esse campo. No seu exemplo, o método ReajustarSalario pode acessar _salario diretamente e aplicar a lógica necessária para reajustar o salário.
  2. Propriedade com private set (Salario):

    • Usando uma propriedade com private set, você está encapsulando o campo privado dentro de uma propriedade pública que permite leitura, mas restringe a modificação direta do valor. O private set impede que qualquer código fora da classe altere o valor da propriedade diretamente, mas ainda permite que métodos dentro da classe, como ReajustarSalario, façam essa alteração. Isso pode simplificar o código, pois você não precisa criar métodos adicionais para acessar o valor do campo.

No seu exemplo, ambas as abordagens podem produzir o mesmo efeito, especialmente se a lógica de validação e alteração do salário estiver corretamente implementada no método ReajustarSalario. No entanto, usar uma propriedade com private set pode ser mais direto e alinhado com práticas modernas de C#, onde se prefere encapsular o estado de um objeto através de propriedades.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.