es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

C#: ¿Cómo manejar un método que está implementado en las clases derivadas pero no en la clase padre en un bucle?

Tengo el siguiente método en mi clase:

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

<pre><code>return Cost;
</code></pre>

}
“`

El problema es que el método Compute solo está implementado en clases derivadas de GenericTask, por ejemplo, EngineeringTask y DevelopmentTask, y por lo tanto el código anterior no se compila.

¿Cómo puedo lograr lo que quiero? Soy nuevo en C# y no sé la “forma correcta” de lograr esto. ¿Debo implementar un método Compute ficticio en GenericTasks, aunque nunca compute nada porque falta datos apropiados?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para resolver este problema, se puede hacer uso de la herencia y el polimorfismo en C#. Se puede crear un método abstracto llamado Compute en la clase GenericTask, el cual se implementará en las clases derivadas.

    “`C#
    public abstract class GenericTask {
    // …
    public abstract double Compute();
    // …
    }

    public class EngineeringTask : GenericTask {
    // …
    public override double Compute() {
    // Implementación de Compute para EngineeringTask
    // …
    }
    // …
    }

    public class DevelopmentTask : GenericTask {
    // …
    public override double Compute() {
    // Implementación de Compute para DevelopmentTask
    // …
    }
    // …
    }

    public double ComputeCost() {
    double cost = 0;
    foreach (GenericTask task in this.genericTasks) {
    cost += task.Compute();
    }
    return cost;
    }
    “`

    Al hacer el método Compute abstracto en la clase GenericTask, se asegura que todas las clases derivadas deben implementar su propia versión del método Compute. Después, en el método ComputeCost, simplemente se llama a task.Compute() y el polimorfismo se encarga de llamar a la implementación correcta basado en el tipo real del objeto.

Comments are closed.