Uso de Interfaces y Polimorfismo en Visual Studio Code
Clase 9 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#
10:30 min - 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 usar interfaces en C# para aplicar polimorfismo de forma segura, filtrar colecciones con LINQ y evitar errores silenciosos en runtime. Aquí verás cómo pasar de una implementación básica a consultas por tipo, reforzando la idea de interfaz como contrato y diferenciándola de la herencia.
¿Cómo usar interfaces para limpiar la escuela con C#?
La implementación de la interfaz permite ejecutar acciones comunes en objetos distintos. Al invocar la limpieza desde el núcleo, se llama al método de la escuela y a sus cursos, confirmando que la interfaz estandariza el comportamiento sin importar el tipo concreto.
- Se invoca la limpieza: engine.escuela.limpiar.
- Se agrega feedback con bip al finalizar: tres pitidos.
- Se ajusta la frecuencia del bip: primero muy alta, luego grave a 1000 Hz.
- Se enfatiza el evento importante con printer.title: «Escuela Platzi Academy limpia».
Código orientativo:
// Disparar la rutina de limpieza
engine.Escuela.Limpiar();
// Feedback al finalizar
printer.Beep(frecuencia: 1000, duracionMs: 500, repeticiones: 3);
printer.WriteTitle("Escuela Platzi Academy limpia.");
¿Qué valida el log de limpieza?
- Limpieza de cursos: 101, 102, 103.
- Mensaje final de establecimiento: «Escuela Platzi limpia» y luego «Escuela Platzi Academy limpia».
- Confirmación audible: pitidos solo al terminar para evitar ruido innecesario.
¿Por qué destacar el final con title?
- Es un hito del proceso: toda la escuela quedó limpia.
- Mejora la lectura del flujo y reduce mensajes perdidos.
¿Cómo filtrar con LINQ y evitar errores silenciosos?
Al crear una lista desde “todos los objetos” de la escuela, un casting directo a ILugar puede romper en ejecución si hay tipos que no implementan la interfaz. El problema: errores silenciosos, datos inconsistentes y ejecución “aparentemente” normal.
Código riesgoso:
var listaILugar = listaObjetos
.Select(o => (ILugar)o) // Puede fallar: no todos son ILugar
.ToList();
Solución segura: filtrar antes de convertir usando la condición de tipo. Así, la query trae únicamente objetos válidos (escuela y cursos) y el casting es seguro.
var listaILugar = listaObjetos
.Where(o => o is ILugar)
.Select(o => (ILugar)o)
.ToList();
¿Por qué el casting directo falla?
- No todos los objetos comparten la interfaz ILugar.
- El casting genera excepciones y resultados inconsistentes.
- Es un error silencioso: la app puede seguir sin alertar claramente.
¿Qué condición usar con where?
- where con verificación de tipo: o is ILugar.
- Beneficio: la query retorna solo los objetos que cumplen la interfaz.
- Resultado esperado: escuela y cursos como 101, 201, 202, etc.
¿Qué es una interfaz como contrato y cómo aplicarla al polimorfismo?
Una interfaz es un contrato: indica lo que un tipo debe tener, no cómo implementarlo. A diferencia de la herencia (que transmite comportamiento), la interfaz garantiza mínimos y habilita polimorfismo sin acoplarse a clases concretas.
- Interfaces: agrupan objetos por capacidades comunes.
- Herencia: comparte implementación, como en ObjetoEscuela.
- Contrato: asegura métodos/propiedades sin definir su lógica.
¿Cómo consultar solo alumnos sin crear interfaces?
No necesitas nuevas interfaces para cada consulta. Puedes filtrar por tipo concreto y luego convertir, obteniendo, por ejemplo, solo alumnos (p. ej., 56 creados aleatoriamente para el escenario):
var alumnos = listaObjetos
.Where(o => o is Alumno)
.Select(o => (Alumno)o)
.ToList();
¿Cómo entender interfaz, clase abstracta y clase como “formas de verse”?
- Interfaz real: ILugar, contrato explícito.
- Clase abstracta: puede funcionar como interfaz desde la perspectiva de uso.
- Clase concreta: también puede “verse” como interfaz cuando se consulta por su forma visible.
- Práctica clave: verificar si un objeto “se ve como” otro tipo o interfaz, y actuar en consecuencia.
¿Tienes dudas o quieres compartir cómo aplicas LINQ y polimorfismo en tus proyectos? Deja tu comentario y enriquezcamos la discusión juntos.