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.
publicclassEvaluación
{publicstring Nombre {get;set;}publicAlumno Alumno {get;set;}publicfloat Nota {get;set;}publicstring Asignatura {get;set;}}publicclassAlumno{publicstring Nombre {get;set;}publicstring Id {get;set;}// id únicopublicList<Evaluación> Evaluaciones {get;set;}=newList<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 unaforeach(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 AddRangeforeach(var alumno in curso.Alumnos){var lote =newList<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.
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:
publicabstractclassEntidadBase{publicstring Id {get;set;}publicstring Nombre {get;set;}}publicclassAlumno:EntidadBase{publicList<Evaluación> Evaluaciones {get;set;}=newList<Evaluación>();}publicclassAsignatura:EntidadBase{}publicclassCurso:EntidadBase{}publicclassEscuela: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.
para tener el archivo debes ir al git y descargarlo, pero usar la rama Etapa4
2)posiblemente estés con problemas con el netcore, debes cambiar el archivo .csproj donde dice <tarjetframework>, debes cambiar el netcoreappx.x por netcoreapp3.1
Muchas gracias ! me salvaste con el punto 2 j
Buenísimo tu aporte, muchas gracias y saludos!!
Quien programa con tildes xd
a mi me encanta poder programar con tildes, así practico mi español.
No es una buena técnica usar ese tipo de carácteres.
No debieron grabar el curso con el tono café, es algo molesto.
Esa fue la primera impresión que tuve también
yo lo veo excelente, de hecho me lo acabo de descargar, cada quien con sus gusto... me aburri de usar el tema oscuro siempre
Ahorita en Febrero 2022 la primera parte de este curso no existe
Quiero hacer este curso correctamente y necesito hacer previamente el de fundamentos de C# pero me aparece que estara disponible proximamente. No se porque no puedo hacer el curso de C# previo a este. Alguien sabria alguna solución
Talvez sea porque ya tomé el curso, pero aun tengo disponible el curso de fundamentos de C# 2018 impartido por el mismo Juan Carlos Ruíz. Puedo ver que lo sacaron de la ruta de ASP, pero cuando voy a la ruta que te dejo en código, puedo acceder y volver a ver las clases y todo.
Toda la razón, no se entiende nada, ya que el primer curso de fundamentos C# se actualizo (2021), y este curso enlaza a la continuacion del curso de fundamentos C# (2018), lo cual ya no existe.
Si, además cuando descargas los archivos de la etapa 5 ya esta todo hecho, y si descargas los de la etapa 4 tampoco concuerdan con los archivos de la clase.
donde quedaron las etapas 1,2,3 y 4???????????????????????????????????
Le entiendo mejor a ese profe, que al que explica el antiguo.
Según puedes iniciar los cursos desde donde uno quiera para no ver cosas que ya sabes o repetidas y este sale con que va a seguir con un proyecto del curso anterior que ya ni siquiera esta, mal ahí es algo molesto y llega a confundir un poco
Además se me hace muy extraño que use vsc cuando en ningún lado vas a ver alguien usando vsc con c# .net otro punto negativo que ya de entrada no me gusto, lo mas normal es usar vs
done esta el otro curso? me sale el que se va a lanzar de c# este año, el 29 de octubre
Profe, el curso de fundamentos de C# me dice no disponible. Ayuda.
hola
Lo que pasa es que sacaron un nuevo curso de Fundamentos de C# con el profesor Celis, pero aun puedes tomar el curso de Fundamentos dictado por este profesor en este enlace:
El nuevo curso todavía no se estrena, por eso te aparece como no disponible.
Encontré un pequ#o bug en la implementación. Cuando cargamos la lista de evaluaciones al alumno, ya que la evaluacion tiene también un objeto de tipo alumno, estamos repitiendo la información. Cuando entramos a una evaluacion que este en la lista de evaluaciones del alumno, esa evaluación posee el alumno, es decir que tenemos en ese alumno que esta dentro de la evaluación, la misma lista de evaluaciones.
PD: Seguro es un poco complicado de entender, pero con un poco de debugging van a encontrar también el bug :D
Happy Hacking :)
Si, se repite la misma información para un mismo objeto Alumno
Un poco tarde pero creo que no hay un bug. Lo que está haciendo el profesor es un mapeo bidireccional en la relación de Alumno-Evaluación.
Que exista un mapeo bidireccional y ambos objetos tenga la relación no es un bug, quizás podría evitarse y tener la relación solamente en un objeto y listo pero sería otra forma.
Solamente es algo que me parece a mi. Saludos
Fundamentos de C sharp con Net Core… ya lo estás tomando? 😄
Esta bastante bien que actualicen sus cursos pero no debieron quitar el anterior a este, en la nueva versión del curso a introducción C# no hablan nunca de Propiedades y de otras cosas quedando bastante incompleto para que el siguiente curso sea este. Se pierde mucho la coherencia. Los que no tienen idea de algunas cosas que no se vieron en el curso anterior quedaran más perdidos que aquello que ya tienen un conocimiento sobre propiedades, clases, etc. sobre todo por que no se tiene el contexto inicial.