Oi, Eduardo! Como vai?
Agradeço por compartilhar.
Seu exemplo ficou bem direto e mostra corretamente o uso de polimorfismo em C#: mesmo as variáveis sendo do tipo Funcionario, o método executado é o das classes Gerente e Desenvolvedor, por causa do override.
Uma dica interessante para o futuro é usar uma lista de Funcionario para gerar relatórios de vários tipos de funcionários sem repetir chamadas individuais.
List<Funcionario> funcionarios = new List<Funcionario>
{
new Gerente(),
new Desenvolvedor()
};
foreach (Funcionario funcionario in funcionarios)
{
Console.WriteLine(funcionario.GerarRelatorio());
}
Esse código percorre a lista e chama GerarRelatorio() para cada objeto, usando o método correto de cada classe.
Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!