Como nas duas classes filhas parece seguir um modelo, (cargo e responsabilidade) adicionei duas propriedades e as usei no método padrão.
Nesse formato nem seria necessário sobrescrever os métodos nas classes filhas, pois a saída esperada no exercício seria exatamente a mesma.
Mas como esse módulo do curso serve justamente para fortalecer o entendimento sobre polimorfismo, adicionei a sobrescrita na classe Gerente chamando a implementação base e de fato realizei a sobrescrita na classe Desenvolvedor.
Funcionario.cs
internal abstract class Funcionario(string cargo, string descricaoCargo)
{
public string Cargo { get; private set; } = cargo;
public string DescricaoCargo { get; private set; } = descricaoCargo;
public virtual string GerarRelatorio()
{
return $"Relatório do {Cargo}: {DescricaoCargo}.";
}
}
Gerente.cs
internal class Gerente(string cargo, string descricaoCargo)
: Funcionario(cargo, descricaoCargo)
{
public override string GerarRelatorio()
{
return base.GerarRelatorio();
}
}
Desenvolvedor.cs
internal class Desenvolvedor(string cargo, string descricaoCargo)
: Funcionario(cargo, descricaoCargo)
{
public override string GerarRelatorio()
{
return $"Relatório do {Cargo}: {DescricaoCargo} - Com possíbilidade de bonus por entregas antes do prazo.";
}
}
Program.cs
Funcionario f1 = new Gerente("gerente", "supervisiona a equipe");
Funcionario f2 = new Desenvolvedor("desenvolvedor", "escreve código e corrige bugs");
Console.WriteLine(f1.GerarRelatorio());
Console.WriteLine(f2.GerarRelatorio());