Essa foi a minha resolução para essa atividade.
// Funcionario.cs
public abstract class Funcionario
{
public string Nome { get; set; }
public string Cpf { get; private set; }
public double Salario { get; protected set; }
public static int TotalFuncionarios { get; private set; }
public Funcionario(string cpf, double salario)
{
this.Cpf = cpf;
this.Salario = salario;
TotalFuncionarios++;
}
public abstract void AumentarSalario();
}
//IBonificacao.cs
public interface IBonificacao
{
public double GetBonificacao();
}
//GerenciadorDeBonificacao.cs
public class GerenciadorDeBonificacao
{
public double TotalDeBonficacao { get; private set; }
public void Registrar(IBonificacao bonificacao)
{
this.TotalDeBonficacao += bonificacao.GetBonificacao();
}
}
//Auxiliar.cs
public class Auxiliar : Funcionario, IBonificacao
{
public Auxiliar(string cpf) : base(cpf, 2000)
{
}
public override void AumentarSalario()
{
this.Salario *= 1.1;
}
public double GetBonificacao()
{
return this.Salario * 0.2;
}
}
//Designer.cs
public class Designer : Funcionario, IBonificacao
{
public Designer(string cpf) : base(cpf, 3000)
{
}
public double GetBonificacao()
{
return this.Salario * 0.17;
}
public override void AumentarSalario()
{
this.Salario *= 1.11;
}
}
//Diretor.cs
public class Diretor : FuncionarioAutenticavel, IBonificacao
{
public Diretor(string cpf) : base(cpf, 5000)
{
}
public double GetBonificacao()
{
return this.Salario * 0.5; /*+ base.GetBonificacao()*/;
}
public override void AumentarSalario()
{
// ou this.Salario *= 1.15;
this.Salario += this.Salario * 0.15;
}
}
// GerenteDeContas.cs
public class GerenteDeContas : FuncionarioAutenticavel, IBonificacao
{
public GerenteDeContas(string cpf) : base(cpf, 4000)
{
}
public double GetBonificacao()
{
return this.Salario * 0.25;
}
public override void AumentarSalario()
{
this.Salario *= 1.05;
}
}
//Program.cs
TestarBofinicacao();
void TestarBofinicacao()
{
Auxiliar camila = new Auxiliar("123.456-00");
camila.Nome = "Camila Silva";
GerenciadorDeBonificacao gerenciador = new GerenciadorDeBonificacao();
gerenciador.Registrar(camila);
Diretor lili = new Diretor("456.789-00");
lili.Nome = "Lili Silveira";
gerenciador.Registrar(lili);
Console.WriteLine(gerenciador.TotalDeBonficacao);
}