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.