1
resposta

[Projeto] Faça como eu fiz: simulador de transporte urbano

class Transporte
{
    public virtual int CalcularTempo(int distanciaKm)
    {
        return distanciaKm;
    }
}

class Onibus : Transporte
{
    public override int CalcularTempo(int distanciaKm)
    {
        return distanciaKm * 2 + 5;
    }
}

class Metro : Transporte
{
    public override int CalcularTempo(int distanciaKm)
    {
        return distanciaKm + 5;
    }
}

class Bicicleta : Transporte
{
    public override int CalcularTempo(int distanciaKm)
    {
        return distanciaKm * 4;
    }
}

List<Transporte> opcoes = new List<Transporte>
{
    new Onibus(),
    new Metro(),
    new Bicicleta()
};

int distancia = 10;

foreach (var transporte in opcoes)
{
    Console.WriteLine($"{transporte.GetType().Name}: {transporte.CalcularTempo(distancia)} min");
}
1 resposta

Oi, Eduardo! Como vai?

Agradeço por compartilhar.

Seu projeto ficou bem organizado e mostra muito bem o uso de polimorfismo em C#. A classe Transporte define o comportamento base com CalcularTempo, e cada subtipo (Onibus, Metro e Bicicleta) sobrescreve esse método com uma regra própria. Isso deixa o foreach mais limpo, porque ele consegue chamar o mesmo método para diferentes tipos de transporte.

Uma dica interessante para o futuro é usar uma propriedade para guardar o nome do transporte, evitando depender de GetType().Name.


class Transporte
{
    public string Nome { get; set; }

    public virtual int CalcularTempo(int distanciaKm)
    {
        return distanciaKm;
    }
}

Nesse exemplo, Nome guarda o nome que sera exibido na tela, deixando o código mais flexível caso voce queira mostrar um texto diferente do nome da classe.

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