C# a Nivel Intermedio
Este desafío sube el nivel, enfocándose en las características que hacen de C# un lenguaje potente y flexible.
¿Qué evaluaremos?
1. Programación Orientada a Objetos Avanzada
- Clases Abstractas vs. Interfaces: Una de las decisiones de diseño más comunes. Debes saber que una clase puede implementar múltiples interfaces pero solo heredar de una clase base (sea abstracta or concreta). Las interfaces definen un contrato, mientras que las clases abstractas pueden proveer implementación base.
- Polimorfismo: La habilidad de un objeto de tomar muchas formas. En C#, se logra mediante la herencia junto con el uso de métodos
virtualen la clase base yoverrideen la clase derivada.
2. Language-Integrated Query (LINQ)
- Métodos de Extensión: LINQ se implementa en gran parte a través de métodos de extensión, que deben ser
public staticy estar dentro de una clasestatic. - Ejecución Diferida (Deferred Execution): Métodos como
SelectyWhereno se ejecutan hasta que iteras sobre la colección (p.ej. con unforeacho.ToList()). La palabra claveyield returnes la magia que permite crear estos iteradores fácilmente. - Carga de Datos en EF Core: En un contexto de base de datos, es vital saber cargar datos relacionados para evitar el problema N+1. El método
.Include()permite la carga ansiosa (Eager Loading).
3. Programación Asíncrona
- async/await: El objetivo principal de este patrón es liberar el hilo actual (por ejemplo, el hilo de la UI o un hilo de ASP.NET Core) mientras se espera una operación de I/O (entrada/salida), mejorando la escalabilidad y la responsividad.
4. Tipos y Genéricos
- Delegados (Delegates): Son el fundamento de los eventos en C#. Un delegado es un tipo seguro que encapsula una referencia a un método, permitiendo que los métodos sean pasados como argumentos.
- Colecciones Read-Only: Entender las diferencias sutiles entre
IReadOnlyList<T>(que garantiza acceso por índice) yIReadOnlyCollection<T>(que solo garantiza unCounty la capacidad de ser iterada).
Superar este nivel indica que no solo escribes código, sino que también tomas decisiones de diseño informadas.