Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
1
resposta

[Projeto] Faça como eu fiz: cadastro de funcionários

Segue código:

Classe Program:

Interno f1 = new("Luciana", "Desenvolvedora", 7000.00m);
Freelancer f2 = new("Carlos", "Designer", 3500.00m);

f1.Apresentar();
f2.Apresentar();

Interface IFuncionario:

    internal interface IFuncionario
    {
        void Apresentar();
    }

Aqui achei interessante criar uma interface para que todos os funcionários implementem a mesma, assim tanto o Freelancer quanto o Interno terão o mesmo método de Apresentar().

Classei Funcionario:

    internal class Funcionario(string nome, string cargo)
    {
        public string Nome { get; } = nome;
        public string Cargo { get; } = cargo;
    }

Também utilizei o construtor primário que vieram junto ao C# 12.

Classe Freelancer:

    internal class Freelancer(string nome, string cargo, decimal valorProjeto) : Funcionario(nome, cargo), IFuncionario
    {
        public decimal ValorProjeto { get; } = valorProjeto;

        public void Apresentar()
        {
            Console.WriteLine($"Freelancer {Nome} – Cargo: {Cargo} – Projeto atual: R$ {ValorProjeto:N2}");
        }
    }

Classe Interno:

    internal class Interno(string nome, string cargo, decimal salario) : Funcionario(nome, cargo), IFuncionario
    {
        public decimal Salario { get; } = salario;

        public void Apresentar()
        {
            Console.WriteLine($"Funcionária {Nome} – Cargo: {Cargo} – Salário: R$ {Salario:N2}");
        }
    }
1 resposta
solução!

Oii, Fabiano! Como vai?

Eu gostei da forma como você separou a estrutura entre Funcionario, Interno, Freelancer e a interface IFuncionario. Essa escolha deixa o código mais organizado e facilita manter um comportamento em comum, como o método Apresentar(), mesmo quando cada tipo de funcionário possui informações diferentes.

Uma dica interessante para o futuro é usar a interface também em uma lista, permitindo chamar Apresentar() sem precisar tratar cada classe separadamente.

List<IFuncionario> funcionarios = new()
{
    new Interno("Luciana", "Desenvolvedora", 7000.00m),
    new Freelancer("Carlos", "Designer", 3500.00m)
};

foreach (var funcionario in funcionarios)
{
    funcionario.Apresentar();
}

Esse código cria uma lista com diferentes tipos de funcionário e executa o método Apresentar() em todos eles. Isso reforça bem o uso de polimorfismo com interface.

Você pretende testar também mais algum tipo de funcionário nessa estrutura?

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