Herencia para reutilizar código C#
Clase 2 de 35 • Curso de C# con .Net Core 2.1
Contenido del curso
Etapa 5 – POO reutilicemos nuestro código
- 2

Herencia para reutilizar código C#
Viendo ahora - 3

Herencia y Polimorfismo en Programación Orientada a Objetos
11:42 min - 4

Polimorfismo en Programación Orientada a Objetos
13:17 min - 5

Casting en C#: cuándo funciona y cuándo falla
07:09 min - 6

Conversiones seguras en C# con is y as
12:44 min - 7

Sobrescribir ToString para depuración en C#
08:15 min
Etapa 6- Ajustes y funcionalidad
Etapa 7 – Preparando información para nuestros reportes
- 11

Manejo Avanzado de Métodos y Parámetros en Programación
15:43 min - 12

Manejo de Parámetros de Salida en Visual Studio Code
04:38 min - 13

Sobrecarga de Métodos para Parámetros de Salida Opcionales
05:51 min - 14

Optimización de Listas: Buenas Prácticas en C#
04:16 min - 15

Dictionary: cómo funciona en C#
11:14 min - 16

Diccionarios con polimorfismo en C#
10:48 min - 17

Uso de Constantes y Enumeraciones para Optimizar Diccionarios en C#
11:33 min - 18

Foreach anidado para diccionarios en C#
13:47 min - 19

Depuración de diccionarios en C#
09:37 min - 20

Parámetro opcional para controlar impresión en C#
11:47 min - 21

Cómo usar switch en lugar de if/else
14:30 min - 22

Números aleatorios y eventos en C#
12:52 min - 23

Diccionarios y Refactoring en Programación Básica
02:13 min
Etapa 8 – Consultas
- 24

Cómo crear un reporteador en C sharp
11:42 min - 25

Generación segura de reportes en sistemas de información
10:21 min - 26

Construcción de reportes con LINQ en C#
11:48 min - 27

Diccionario con evaluaciones por asignatura
08:32 min - 28

Tipos anónimos en LINQ para reportes complejos
10:52 min - 29

Cálculo del Promedio de Notas Agrupadas por Alumno y Asignatura
10:46 min - 30

Creación de Tipos de Datos Personalizados en Programación Avanzada
12:05 min - 31

Generación de Reportes con LINQ en C#
02:09 min
Etapa 9 – Creando una UI de Consola
Aprende a reutilizar código en C# con programación orientada a objetos: renombrar entidades correctamente, organizar evaluaciones por alumno, evitar listas nulas y sentar las bases de herencia para eliminar duplicación. Verás cómo depurar en Visual Studio y mejorar la eficiencia con listas genéricas.
¿Cómo corregir y organizar las evaluaciones en C#?
Elegir una estructura clara evita errores y simplifica la lógica. Primero, corrige el nombre de la entidad: usa singular “Evaluación”. En Visual Studio, emplea “renombrar símbolo” para actualizar referencias de forma segura. Mantén consistencia incluso en el nombre del archivo.
- Nombres de entidades en singular para coherencia.
- Corrección con “renombrar símbolo” en Visual Studio.
- Decisión de diseño: las evaluaciones viven en el alumno.
Implementa que cada alumno sea portador de su propia lista. Así logras una doble referencia: cada Evaluación conoce a su Alumno, y cada Alumno tiene su lista de Evaluaciones. Esto facilita consultas por alumno o por evaluación.
public class Evaluación
{
public string Nombre { get; set; }
public Alumno Alumno { get; set; }
public float Nota { get; set; }
public string Asignatura { get; set; }
}
public class Alumno
{
public string Nombre { get; set; }
public string Id { get; set; } // id único
public List<Evaluación> Evaluaciones { get; set; } = new List<Evaluación>();
}
Claves prácticas: - Inicializa la lista para evitar null. - Genera evaluaciones aleatorias por alumno. - Mantén la referencia Evaluación.Alumno al momento de crear cada evaluación.
¿Cómo se asignan las evaluaciones al alumno?
Puedes agregar una por una o usar un enfoque más eficiente con AddRange.
// Opción 1: agregar una por una
foreach (var alumno in curso.Alumnos)
{
for (int i = 0; i < 5; i++)
{
var ev = new Evaluación { Alumno = alumno /* ... */ };
alumno.Evaluaciones.Add(ev);
}
}
// Opción 2: más eficiente con AddRange
foreach (var alumno in curso.Alumnos)
{
var lote = new List<Evaluación>();
for (int i = 0; i < 5; i++)
{
var ev = new Evaluación { Alumno = alumno /* ... */ };
lote.Add(ev);
}
alumno.Evaluaciones.AddRange(lote);
}
Resultado esperado: si hay 4 asignaturas y creas 5 evaluaciones por asignatura, cada alumno acumula 20 evaluaciones.
¿Cómo evitar errores comunes y depurar con seguridad?
Durante la asignación, el fallo típico es: la lista Evaluaciones es nula. La solución: inicializa la propiedad en su declaración o en el constructor. Con eso, la colección existe aunque esté vacía.
- Inicializa listas genéricas desde el inicio.
- Revisa referencias antes de agregar.
- Usa debug paso a paso para validar el flujo.
Pasos de depuración en Visual Studio: - Coloca un breakpoint en la sección donde asignas evaluaciones. - Entra al método de inicialización del engine. - Verifica que Evaluación.Alumno se asigne dentro del bucle. - Inspecciona Alumno.Evaluaciones para confirmar el conteo tras cada iteración.
Patrón seguro para listas:
public class Alumno
{
public List<Evaluación> Evaluaciones { get; set; } = new List<Evaluación>();
}
Beneficios inmediatos: - Evitas excepciones por referencia nula. - Aseguras la doble referencia entre Alumno y Evaluación. - Aceleras el llenado con AddRange cuando generas lotes.
¿Cómo reducir duplicación con herencia en POO?
Si Alumno, Asignatura, Curso y Escuela comparten “Id único” y “Nombre”, estás repitiendo lógica. La herencia resuelve esto: crea una clase base con lo común y haz que las demás hereden. Así centralizas la responsabilidad y facilitas el mantenimiento.
- Extrae propiedades compartidas a una clase base.
- Hereda en entidades concretas para reutilizar código.
- Mantén una sola fuente de verdad para el Id único y el nombre.
Ejemplo orientativo:
public abstract class EntidadBase
{
public string Id { get; set; }
public string Nombre { get; set; }
}
public class Alumno : EntidadBase
{
public List<Evaluación> Evaluaciones { get; set; } = new List<Evaluación>();
}
public class Asignatura : EntidadBase { }
public class Curso : EntidadBase { }
public class Escuela : EntidadBase { }
Ventajas claras: - Menos duplicación y menos errores. - Estandarización del Id único y del nombre. - Código más legible y fácil de extender.
¿Tienes otra forma de estructurar las evaluaciones o la clase base? Comparte tus dudas o mejoras en los comentarios.