Interfaces en C#: contratos sin herencia múltiple
Clase 8 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
Fortalece tu arquitectura en C# con un enfoque claro y práctico: polimorfismo, interfaces y colecciones para lograr una solución más robusta. Aquí verás cómo pasar de arreglos a colecciones y luego a diccionarios, crear contratos con interfaces y reutilizar código de forma profesional, todo desde Visual Studio Code.
¿Qué se logró en las etapas anteriores?
Durante cinco etapas se consolidó una base sólida orientada a objetos que facilita extender y mantener la solución.
- Etapa 1: creación de la escuela con un bosquejo inicial basado en requerimientos definidos.
- Etapa 2: incorporación de objetos como cursos y análisis de estructura y anidamiento de objetos.
- Etapa 3: cambio de arreglos a colecciones para manipular objetos, incluidos los anidados.
- Etapa 4: refactorización del código y generación de datos de prueba en volumen con estrategias aleatorias y producto cartesiano.
- Etapa 5: reutilización de código con programación orientada a objetos, moviendo funcionalidades comunes a una clase padre abstracta (ObjetoEscuela).
Además, se añadió un printer que produce líneas y títulos, y funciones para listar todos los objetos de la escuela.
¿Cómo aplicar polimorfismo e interfaces en C#?
El objetivo es permitir que distintos objetos compartan comportamientos sin herencia múltiple. En C# no hay herencia múltiple; por eso, las interfaces actúan como contrato.
¿Por qué no usar herencia múltiple en C# y sí interfaces?
- C# evita la herencia múltiple por su complejidad y propensión a errores.
- Una interfaz define qué miembros debe exponer un objeto, sin implementación.
- Convención en .NET: los nombres de interfaz inician con I, por ejemplo, ILugar.
- En una interfaz, los miembros no llevan modificadores: se asumen públicos.
¿Cómo se define y usa ILugar para dirección y limpieza?
Se plantea una necesidad transversal: algunos objetos (Escuela, Curso) tienen dirección y pueden limpiar lugar.
- Se crea la interfaz ILugar con una propiedad Dirección y un método LimpiarLugar.
- ILugar es el contrato: cada clase que la implemente debe ofrecer esa estructura, sin importar la forma exacta de su lógica interna.
- Se implementa en Escuela y Curso junto con la herencia de la clase base abstracta ObjetoEscuela.
¿Cómo se implementa ILugar en Escuela y Curso?
- En Escuela: se agrega la propiedad Dirección y el método público LimpiarLugar.
- En Curso: también se implementa ILugar; el IDE ayuda con Control + punto en Visual Studio Code para generar la plantilla de miembros.
- Atención a la accesibilidad: si aparece “inaccesible por su nivel de protección”, el método debe ser público.
- Implementación explícita de interfaz: útil cuando hay posibles conflictos de nombres, por ejemplo, si existiera otra interfaz como IGeolocalizado con otra Dirección.
¿Qué operaciones prácticas se construyen y qué viene en la etapa seis?
Se integra la interfaz con lógica real y se alista el cambio de estructura de datos para mayor robustez.
- Uso de Printer: dibuja una línea estándar y apoya la salida de mensajes.
- Limpieza en Curso: se imprime “limpiando establecimiento”, luego “curso [nombre] está limpio” con formato mediante Console.WriteLine.
- Limpieza en Escuela: se imprime línea y mensajes de inicio y fin; adicionalmente, se recorren todos los cursos con foreach para ejecutar LimpiarLugar en cada uno.
- Accesibilidad correcta: los métodos que implementan la interfaz deben ser públicos para permitir su invocación desde otros objetos.
- Próximo paso de la etapa 6: pasar de lista a diccionario para habilitar nuevas operaciones y ofrecer listas pensadas para consumo externo.
¿Cómo mejora tu diseño con estos cambios?
- Contratos claros con interfaces que separan el “qué” del “cómo”.
- Polimorfismo simple y mantenible sin herencia múltiple.
- Reutilización consistente desde una clase base abstracta.
- Colecciones adecuadas: primero listas/colecciones, luego diccionarios más expresivos.
- Apoyo del IDE para implementar interfaces rápido y sin errores.
¿Te gustaría comentar cómo estructurarías otros contratos (por ejemplo, notificación o geolocalización) o qué claves usarías al migrar a diccionarios?