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

[Resolução] Faça como eu fiz: encapsulando reajuste de salário

Funcionario.cs

internal class Funcionario(string nome, decimal salario)
{
    private decimal _salario = salario;
    public string Nome { get; } = nome;
    public decimal Salario => _salario;

    public void ReajustarSalario(decimal novoSalario)
    {
        if (novoSalario <= Salario)
            throw new ArgumentException("O novo salário deve ser maior que o salário atual.", nameof(novoSalario));
        
        _salario = novoSalario;
        Console.WriteLine(this);
    }

    public override string ToString()
    {
        StringBuilder sb = new();
        sb.AppendLine($"Funcionário: {Nome}");
        sb.AppendLine($"Salário atual: {Salario:C}");

        return sb.ToString();
    }
}

Program.cs

using E04EncapsulandoReajusteDeSalario.Models;

Funcionario f = new("Fernanda Lima", 4000);

try
{
    f.ReajustarSalario(3500); //Falha
}
catch (ArgumentException ex)
{
    Console.WriteLine($"Erro: {ex.Message}");
}

try
{
    f.ReajustarSalario(4200);
}
catch (ArgumentException ex)
{
    Console.WriteLine($"Erro no parâmetro [{ex.ParamName}]: {ex.Message}");
}
2 respostas
solução!

Oi, Gerson! Como vai?

Gostei da forma como você aplicou o encapsulamento, mantendo _salario privado e controlando a alteração por meio do método ReajustarSalario. A validação com ArgumentException deixou a regra de negócio bem definida e o uso do ToString() com StringBuilder organizou bem a exibição das informações.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!

Vlw Armando!