Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

153
Vistas
Cómo manejar clases derivadas con diferentes parámetros

Soy nuevo en C# y tengo un proyecto en el que tengo una Task de clase principal con clases derivadas FixedTask y RelativeTask .

FixedTask y RelativeTask tienen propiedades diferentes, con nombres diferentes. Y necesito realizar algunos cálculos con cada Task para calcular alguna carga de trabajo.

Un Project contiene diferentes Tasks que pueden ser de varios tipos, por ejemplo FixedTask y RelativeTask . Estaba planeando hacer algo como esto:

 foreach (Task Task in this.Tasks) { switch (Task) { case FixedTask: switch (Task.Frequency) { case "Daily": // do some calculations // other frequency cases } // other Task cases }

Pero recibo un error de que Task no tiene un parámetro en particular porque está implementado en FixedTask pero no en RelativeTask .

Hubiera pensado que el patrón de switch le permitió a C # entender qué tipo debe considerar, pero aparentemente no.

¿Cuál es la forma correcta de lograr lo que quiero?

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Coincidencia de patrones: case FixedTask f .

Pero no deberías. Su clase base no debe saber ni preocuparse por cómo se implementan las clases derivadas.

El propósito de OO y la herencia es que las clases derivadas contengan su propia lógica. Entonces, si su ejecutor de tareas quiere ejecutar una tarea, hágalo:

 foreach (Task task in this.Tasks) { task.Execute(); }

Y luego, cada clase derivada de tareas tiene la lógica en su método Execute() anulado.

over 4 years ago · Santiago Trujillo Denunciar

0

La coincidencia de patrones ayuda a:

 foreach (Task Task in this.Tasks) { switch (Task) { case FixedTask ft: switch (ft.Frequency) { case "Daily": ... } case RelativeTask rt: switch (rt.OtherProperty) { case ...: }
over 4 years ago · Santiago Trujillo Denunciar

0

Como una enmienda rápida (pero no la mejor), sugiero la coincidencia de patrones , es decir

 foreach (Task task in Tasks) { if (task is FixedTask fixedTask) { // From now on you work with fixedTask switch (fixedTask.Frequency) { ... } } else if (task is RelativeTask relativeTask) { // From now on you work with relativeTask } }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda