Reflection

Reflection es el medio por el cual las aplicaciones .NET pueden accesar información y descubrir métodos y tipos de datos de un ensamblado (assembly) en tiempo de ejecución. Podemos tambien invocar los métodos y usar la información de tipos mediante late-binding utilizando el rico API que el nombre de espacio de Reflection nos provee.

El nombre de espacio System.Type es el núcleo del sistema de reflección. System.Type es una clase abstracta que es usada para representar un tipo real del CTS (Common Type System). Incluye métodos que permiten determinar el nombre del tipo, en que módulo está contenido, su nombre de espacio; así como si es una variable por referencia o por valor.

Por ejemplo, utilizando la clase System.Reflection.Assembly podemos obtener todos los tipos existentes en un ensamblado (assembly), y todos los módulos contenidos en el mismo. Para invocar un método de una clase cargada en tiempo de ejecución, se utiliza una combinación de la case Activator, que permite crear una instancia del tipo que obtuvimos mediante la clase Assembly. Entonces usamos el método del tipo GetMethod para crear un objeto MethodInfo especificando el nombre del método que deseamos invocar. En este punto ya podemos utilizar el objeto MethodInfo.Invoke; pasandole la instancia del tipo que creamos utilizando la clase Activator.

Suena muy complicado, pero en realidad es muy sencillo. Les dejo un simple ejemplo de código para que puedan tener una vista más completa de lo que estoy explicando:

 

1 namespace Programming_CSharp
2 {
3 using System;
4 using System.Reflection;
5
6 public class Tester
7 {
8 public static void Main( )
9 {
10 // what is in the assembly
11 Assembly a = Assembly.Load(«Mscorlib.dll»);
12 Type[] types = a.GetTypes( );
13 foreach(Type t in types)
14 {
15 Console.WriteLine(«Type is {0}», t);
16 }
17 Console.WriteLine(
18 «{0} types found», types.Length);
19 }
20 }
21 }

En este ejemplo cargamos una assembly en tiempo de ejecución y mostramos en la consola todos los tipos que tiene ese assembly. Esta muy sencillo y piensen la extensibilidad que nos da Reflection.

Imaginate que tu programa pueda tener Add-Ins y mediante Reflection ejecutar eventos personalizados, tipos especificos… ¿te molestaría compartir alguna idea de como estás usando Reflection actualemente en tus aplicaciones?

Cheers!


Comentarios

Deja una respuesta