Usando Reflection en C#

Reflection es una “tecnica”, se podria decir, para poder extraer la metadata de nuestras clases dentro de una assembly, por ejemplo, teniendo una clase llamada Persona, asumiendo que yo no se que propiedades tiene esta clase solo se el nombre, utilizando reflections puede obtener una lista de todas las propiedades que posee esta clase y asi mismo obtener sus valores.En el .net Framework, las clases de reflection se encuentran dentro del namespace System.Reflection.

Que es metadata?
Meta data es la descripcion sobre nuestros datos, por ejemplo, en una base de datos podemos tener una columna en nuestra tabla, y luego tener la descripcionq ue dice que es la columna, en este caso la metadata seria la descripcion de nuestra columna.

Para que sirve?
Bueno muchos de los frameworks usan reflection y ni nos damos cuenta, sirve en casos de uso donde se necesita automatizar ciertas actividades. Un caso de uso comun es el mapeo de valores, a continuacion un ejemplo:
class Program { static void Main(string[] args) { var atributosPersona = new Dictionary<string ,STRING>(); atributosPersona.Add("Nombre","Roberto Javier"); atributosPersona.Add("Apellido","Yudice"); var persona = new Persona(); foreach (var atributo in atributosPersona) { PropertyInfo propertyInfo = persona.GetType().GetProperty(atributo.Key); propertyInfo.SetValue(persona,atributo.Value,null); } Console.WriteLine("Nombre Persona: {0}",persona.Nombre); Console.WriteLine("Nombre Persona: {0}",persona.Apellido); } } internal class Persona { public String Nombre { get; set; } public String Apellido { get; set; } }

El resultado del codigo de arriba es el siguiente:

es uan funcion que tiene cualquier variable y retorna un objeto Type. El ultimo parametro que va null es para asignar valores a propiedades indexadas.NET el costo de usar reflection es minimo. utilizo la funcion SetValue la cual lleva como parametro primero la instancia del objeto al que le quiero asignar el valor a la propiedad y segundo el valor que deseo asignar. atributos. La clase Type contiene todo el conjunto de metadatos de la clase. entre otros. las mas comunes son: La funcion GetType. El Mito de reflection Hay una creencia de que usar reflection es lento.GetType() para obetener el tipo de mi clase. Para obtener el tipo de un objeto hay diferentes maneras. en palabras simples. que como su nombre lo dice. asigne valores a las propiedades de mi clase dinamicamente. Explicacion Bueno primero que nada creo una diccionario que contiene el nombre de la propiedad de mi clase y el valor que le quiero asignar. por ejemplo. por eso le mando null. llamo el metodo GetProperty el cual lleva como parametro el nombre de mi propiedad y retorna un objeto PorpertyInfo. es la metadata sobre la propiedad. Si solo saben el nombre de la clase y no tienen ningun objeto de ese tipo instanciado pueden usar typeof(Persona). etc. NHibernate. siempre que quieran utilizar reflection lo primero es obtener el tipo de su objeto. Esto es muy importante y es el corazon de Reflection.NET MVC. la verdad es que quizas lo fue alguna ves pero con los procesadores actuales y avances en la arquitectura de las plataformas como . Luego hago un foreach que recorrera cada uno de los elementos del diccionario. Sobre el objeto Type de mi clase persona. Ya una ves tengo mi objeto PropertyInfo. en mi caso mi propiedad no es indexada. donde Persona es el nombre de su clase. sus propiedades.Como podran ver. Dentro del foreach ocupo persona. sus metodos. . muchos frameworks lo usan como ASP. en el valor que va dentro de [] en un array. Con este mismo objeto podemos asignarle un valor a la propiedad de un objeto.

Sign up to vote on this title
UsefulNot useful