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.");
}
}
}