1
resposta

Faça como eu fiz: exibindo mídias

public abstract class Midia
{
public string Nome { get; private set; }
protected Midia(string nome)
{
    Nome = nome;    
}

public virtual void ExibirDetalhes()
{
    Console.WriteLine($"Midia: {Nome}");
}
}


public class Video : Midia
{
public int Duracao { get; private set; }
public Video(string nome, int duracao) : base(nome)
{
    Duracao = duracao;
}

public override void ExibirDetalhes()
{
    Console.WriteLine($"Vídeo: {Nome} - Duração: {Duracao} minutos");
}
}


public class Imagem : Midia
{
public string Resolucao { get; private set; }

public Imagem(string nome, string resolucao) : base(nome)
{
    Resolucao = resolucao;
}
public override void ExibirDetalhes()
{
    Console.WriteLine($"Imagem: {Nome} - Resolução: {Resolucao}");
}
}


List<Midia> midias = new List<Midia>
{
new Imagem("paisagem.jpg", "1920x1080"),
new Video("filme.mp4", 120)
};

foreach (var midia in midias)
{
midia.ExibirDetalhes();
}
1 resposta

Olá, Jonas!

Parabéns por mais uma excelente entrega. É muito bom ver como você está consolidando o uso de polimorfismo no C#.

Sua solução tá impecável, especialmente pelo uso de propriedades com setter privado (private set) e o construtor protected na classe base. Essas são práticas recomendadas que garantem que o estado do seu objeto não seja alterado de fora da classe, reforçando o pilar do encapsulamento. Ao tratar a lista de forma genérica como List<Midia>, você aproveita o máximo da flexibilidade que a orientação a objetos oferece.

Para avançar ainda mais, você pode explorar como o C# lida com o encapsulamento e modificadores de acesso, o que ajuda a proteger as regras de negócio do seu sistema.

Você conseguiu notar como a combinação de classe abstrata com métodos virtuais ajuda a definir um contrato claro para quem for criar novos tipos de mídia no futuro?

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