C# Como lidar método é implementado em classes derivadas, mas não na classe pai em um loop?

0

Pergunta

Eu tenho o seguinte método na minha classe:

    public double ComputeCost()
    {
        double Cost = 0;
        foreach (GenericTask Task in this.GenericTasks){
            Cost += Task.Compute();
        }

        return Cost;
        
    }

O problema é que o Compute o método é implementado apenas em classes derivadas a partir de GenericTask exemplo: EngineeringTask e DevelopmentTask e, portanto, o código acima não compila.

Como posso conseguir o que eu quero? Eu sou novo para C# e não sabe a "forma limpa" para conseguir isso ? Deve implementar um manequim Compute método na GenericTasks embora ele nunca vai calcular tudo devido à falta de dados adequados ?

c# for-loop inheritance
2021-11-23 21:20:05
1

Melhor resposta

2

Criar um método abstrato na classe base e ter as classes derivadas de substituir esse método.

Classe Base:

public abstract double Compute();

Classe derivada:

public override double Compute()
{
    /* your class-specific implementation */
}

https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/override

https://en.wikipedia.org/wiki/Virtual_function

2021-11-23 21:25:42

Além de que @Moho disse, você pode ler mais sobre Polimorfismo e Primordial para compreender conceitos de OOP.
R.Abbasi

Em outros idiomas

Esta página está em outros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................