Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

159
Views
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 answers
Answer question

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 Report

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!