C# : Comment faire pour gérer méthode qui est mise en œuvre dans les classes dérivées, mais pas dans la classe parent dans une boucle?

0

La question

J'ai la méthode suivante dans ma classe:

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

        return Cost;
        
    }

Le problème est que le Compute la méthode n'est mise en œuvre dans les classes dérivées à partir de GenericTask par exemple EngineeringTask et DevelopmentTask et donc le code ci-dessus ne compile pas.

Comment puis-je obtenir ce que je veux? Je suis nouveau en C# et ne connaît pas "propre" pour atteindre cette ? Dois-je mettre en œuvre un mannequin Compute méthode dans le GenericTasks bien qu'il ne sera jamais à calculer quoi que ce soit parce qu'il manque de données appropriées ?

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

La meilleure réponse

2

Créer une méthode abstraite dans la classe de base et ont les classes dérivées de remplacer cette méthode.

Classe de Base:

public abstract double Compute();

La classe dérivée:

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

En plus de ce que @Moho dit, vous pouvez en lire plus sur le Polymorphisme et Primordial de comprendre les concepts de la programmation orientée objet.
R.Abbasi

Dans d'autres langues

Cette page est dans d'autres langues

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