Reflection en C#

Reflection es una característica poderosa de C# que permite inspeccionar metadatos de tipos, acceder a propiedades, campos y métodos en tiempo de ejecución. Es útil para frameworks, serialización, pruebas unitarias o cuando necesitas trabajar con tipos desconocidos en tiempo de compilación. Sin embargo, se debe usar con precaución debido a su impacto en rendimiento y seguridad.

Obtener información de un tipo

Puedes usar el método GetType() o la clase Type para inspeccionar las propiedades de un objeto.

var persona = new Persona { Nombre = "Alice", Edad = 30 };
Type tipo = persona.GetType();

Console.WriteLine($"Tipo: {tipo.Name}");
foreach (var prop in tipo.GetProperties()) {
    Console.WriteLine($"Propiedad: {prop.Name}");
}
    

Esto permite listar todas las propiedades públicas de un objeto.

Invocar métodos dinámicamente

Reflection permite llamar a métodos aunque no se conozcan en tiempo de compilación.

MethodInfo metodo = tipo.GetMethod("Saludar");
metodo.Invoke(persona, null);
    

Aquí se obtiene el método Saludar y se invoca en la instancia de persona.

Uso avanzado

Reflection también permite crear instancias dinámicamente, leer atributos personalizados y trabajar con ensamblados.

object instancia = Activator.CreateInstance(typeof(Persona));
Console.WriteLine(instancia.GetType().Name);
    

Esto es común en frameworks de inyección de dependencias y serializadores.

Buenas Prácticas

Usa Reflection solo cuando sea necesario, ya que puede ser más lento y menos seguro. Valida los tipos y miembros antes de invocar dinámicamente. Evita exponer datos sensibles. Considera alternativas como expresiones o interfaces para evitar sobreuso de Reflection.

Ver también

Documentación oficial de Microsoft

Ver más en Microsoft Docs