📌 Genéricos (Generics) avanzados

Permiten crear clases y métodos reutilizables con tipos dinámicos pero seguros.


class Caja<T>
{
    public T Valor { get; set; }
}

Uso:


Caja<int> cajaEntero = new Caja<int>();
Caja<string> cajaTexto = new Caja<string>();


También puedes agregar restricciones:


class Repositorio<T> where T : class
{
}

📌 Expresiones Lambda y Delegados Funcionales

Base de LINQ y programación moderna en C#.


Func<int, int> cuadrado = x => x * x;
Console.WriteLine(cuadrado(5));

Tipos comunes:


Func<> → devuelve valor

Action<> → no devuelve valor

Predicate<> → devuelve bool

📌 LINQ Avanzado

Consultas complejas:


var resultado = personas
    .Where(p => p.Edad > 18)
    .OrderBy(p => p.Nombre)
    .GroupBy(p => p.Ciudad);

También puede escribirse como consulta tipo SQL:


var adultos = from p in personas
              where p.Edad > 18
              select p;

📌 Programación Multihilo (Multithreading)

Permite ejecutar múltiples tareas al mismo tiempo.


using System.Threading;

Thread hilo = new Thread(() =>
{
    Console.WriteLine("Hilo en ejecución");
});

hilo.Start();

Más moderno:


Task.Run(() => Console.WriteLine("Tarea en segundo plano"));

Conceptos clave:


* Thread
* Task
* Parallel
* lock
* ConcurrentDictionary

📌 Programación Asíncrona Avanzada

Uso real en APIs:


public async Task<string> ObtenerDatosAsync()
{
    using HttpClient client = new HttpClient();
    return await client.GetStringAsync("https://api.ejemplo.com");
}

Debes entender:


* async
* await
* Task
* Task<T>
* Deadlocks
* ConfigureAwait

📌 Expresiones y Árboles de Expresión

Usados en frameworks como Entity Framework.


Expression<Func<int, bool>> expr = x => x > 5;

Permiten construir código dinámicamente.

📌 Reflection

Permite inspeccionar clases en tiempo de ejecución.


Type tipo = typeof(Persona);
var propiedades = tipo.GetProperties();

Se usa en:


* Inyección de dependencias
* Serialización
* Frameworks

📌 Inyección de Dependencias (DI)

Principio clave en arquitectura limpia.


Ejemplo simple:

interface IServicio
{
    void Ejecutar();
}

class Servicio : IServicio
{
    public void Ejecutar()
    {
        Console.WriteLine("Ejecutando...");
    }
}

Se inyecta en constructor:

class Controlador
{
    private readonly IServicio _servicio;

    public Controlador(IServicio servicio)
    {
        _servicio = servicio;
    }
}

Muy usado en ASP.NET Core.

📌 Patrones de Diseño Importantes

Debes conocer:


🔹 Singleton

🔹 Repository

🔹 Factory

🔹 MVC

🔹 Dependency Injection

🔹 Unit of Work

Ejemplo Singleton:


class Configuracion
{
    private static Configuracion instancia;

    private Configuracion() {}

    public static Configuracion Instancia
    {
        get
        {
                if (instancia == null)
                instancia = new Configuracion();
            return instancia;
        }
    }
}

📌 Arquitectura Profesional

En proyectos reales se trabaja con:


* Capas (Presentation, Application, Domain, Infrastructure)
* Clean Architecture
* SOLID
* Microservicios
* APIs REST
* ORM (como Entity Framework)
* Testing (xUnit, NUnit)

🧠 Conceptos Avanzados Modernos (C# 8+)

* Records
* Pattern Matching
* Nullable Reference Types
* Span<T>
* Memory<T>
* ValueTask
* Minimal APIs
* Top-level statements

Ejemplo Record:


public record Persona(string Nombre, int Edad);

📌 Resumen Avanzado

Un desarrollador avanzado en C# domina:


* Genéricos
* LINQ avanzado
* Multithreading
* Async/await profundo
* Reflection
* DI
* Patrones de diseño
* Arquitectura limpia
* Frameworks como ASP.NET Core
* Entity Framework
← REGRESAR