C# : Jak zvládnout metody, která je implementována v odvozených třídách, ale ne v nadřazené třídě ve smyčce?

0

Otázka

Mám následující metodu ve třídě:

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

        return Cost;
        
    }

Problém je, že Compute metoda je implementována pouze v třídy odvozené od GenericTask např. EngineeringTask a DevelopmentTask a proto výše uvedený kód není kompilace.

Jak mohu dosáhnout toho, co chci? Jsem nový C# a neví, "čistý způsob", aby dosažení tohoto cíle ? Mám realizovat figuríny Compute metoda v GenericTasks altough to nikdy nebude počítat nic, protože to postrádá správné údaje ?

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

Nejlepší odpověď

2

Vytvořit abstraktní metodu základní třídy a odvozené třídy přepsat tuto metodu.

Základní třídy:

public abstract double Compute();

Odvozené třídy:

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

Kromě toho, co @Moho řekl, si můžete přečíst více o Polymorfismus a Převažující pochopit OOP konceptů.
R.Abbasi

V jiných jazycích

Tato stránka je v jiných jazycích

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