0
respostas

[Dúvida] Quando passar uma classe abstrata como parâmetro no construtor?

Como eu não sabia que era possível passar como parâmetro no construtor uma classe abstrata, acabei por criar dois construtores na classe Certificado.

Qual as diferenças entre uma abordagem e outra? E se as classes Docente e Analista tivessem mais propriedades e métodos, mesmo assim eu poderia passar como parâmetro no momento da instância do certificado e utilizar estas propriedades e métodos dentro da classe Certificado?

Segue abaixo o meu código:

Program.cs

Analista analista = new Analista("Analista de Sistemas");
Docente docente = new Docente("Docente de Matemática");
Certificado cerf1 = new Certificado(analista);
Certificado certf2 = new Certificado(docente);

cerf1.ExibirCertificado();
certf2.ExibirCertificado();

Profissao.cs

abstract class Profissao
{
    public Profissao(string titulo)
    {
        Titulo = titulo;
    }
    public string Titulo { get; }
}

Docente.cs

class Docente : Profissao
{
    public Docente(string titulo) : base(titulo)
    {
    }
}

Analista.cs

class Analista : Profissao
{
    public Analista(string titulo) : base(titulo)
    {
    }
}

Certificado.cs

class Certificado
{
    public Certificado(Analista analista)
    {
        Analista = analista;
    }
    public Certificado(Docente docente)
    {
        Docente = docente;
    }
    public Analista Analista { get; }
    public Docente Docente { get; }

    public void ExibirCertificado()
    {
        if(Analista != null)
        {
            System.Console.WriteLine($"Certificado emitido para: {Analista.Titulo}");
        }
        else if (Docente != null)
        {
            System.Console.WriteLine($"Certificado emitido para: {Docente.Titulo}");
        }
        else
        {
            System.Console.WriteLine("Nenhuma profissão informada para emitir o certificado.");
        }
    }
}

Garanta sua matrícula hoje e ganhe + 2 meses grátis

Continue sua jornada tech com ainda mais tempo para aprender e evoluir

Quero aproveitar agora