Oi, Lucas! Seja bem-vindo ao fórum!!
Fico feliz que você tenha compartilhado seu código aqui e fique completamente convidado a compartilhar sempre que precisar de ajuda ou simplesmente queira um ponto de vista diferente sobre o código.
Analisando sua implementação com as classes Funcionario, Interno e Freelancer, fica claro que você compreendeu bem o conceito de herança em C#. O uso do construtor com base(N, C) para reaproveitar os parâmetros Nome e Cargo da classe pai está correto, e a separação entre funcionário interno e freelancer faz bastante sentido na prática.
Há apenas um ponto importante a corrigir: na classe Freelancer, você declarou a propriedade Salario do tipo decimal, mas ela nunca recebe um valor. Ao exibir f2.Salario no Console.WriteLine, o resultado será zero, pois somente ValorProjeto é atribuído no construtor. O ideal é substituir f2.Salario por f2.ValorProjeto na linha do Console, que representa o valor real daquele profissional.
Outra dica valiosa para evoluir ainda mais é utilizar a sobrescrita do método ToString() dentro de cada class. Isso torna a exibição dos objetos mais organizada e evita repetição de formatação em múltiplos Console.WriteLine. Veja um exemplo simples:
public override string ToString()
{
return $"{Nome} - {Cargo}";
}
Com esse método, basta chamar Console.WriteLine(f1) e o próprio objeto saberá como se apresentar.
Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!
Você já pensou em adicionar um método para calcular o salário líquido, considerando descontos diferentes para o tipo Interno e para o Freelancer?