Qué es Reflection? Para qué sirve? En qué me es útil? Cuándo usar? Bueno, si te has hecho estas preguntas vas bien, yo también me las hice, jejeje.
Empezemos por la definición:
Reflection proporciona objetos (de tipo Type) que encapsulan ensamblados, módulos y tipos. Se puede utilizar la reflexión para crear dinámicamente una instancia de un tipo, enlazar el tipo a un objeto existente u obtener el tipo a partir de un objeto existente, e invocar sus métodos o tener acceso a sus campos y propiedades.
Reflection es una “tecnica” para poder extraer la metadata de nuestras estructuras de datos dentro de una assembly.
Reflection es la habilidad que tiene un código para revisar su propia estructura, es decir, podemos revisar la metadata que está en el assembly y manipularla a nuestro antojo.
Utilidades
Nos ayuda a consultar qué propiedades o métodos tiene un objeto en TIEMPO DE EJECUCIÓN.
Podemos diseñar un formulario dinámicamente.
Empezando a utilizar Reflection. HowTo
Hay dos formas: usando typeof() o GetType(). Ambas formas retornan un objeto tipo Type, ese es el que nos otorga a información que queremos.
Entre los principales métodos de Type están:
GetField() Obtiene el campo según el nombre.
GetMethod() Obtiene un método, y si éste tiene sobre cargas, al igual que el constructor, hay que pasarle el tipo correspondiente de la sobre carga.
GetProperty() Obtiene la propiedad según el nombre.
Nota: aparte de los métodos anteriores existen los mismos en plural, es decir que en vez de obtener un miembro, obtienes un arreglo con los resultados según los parámetros que le indiques. Ejm: GetProperty() tienes: GetProperties() el cual puedes llamar sin parámetros para obtener un PropertyInfo[] con todas las propiedades.
Let's do it. Ejemplo.
A continuación un ejemplo para fines académicos, dada una clase persona, usando reflection asignaré valores a sus propiedades. Primero lleno un diccionario cuya Key es el nombre de la propiedad de la clase y su Value obviamente el nombre que le quiero asignar a esa propiedad. Luego, recorro el diccionario para extraer sus propiedades y asignarles un valor.
Imports System.Reflection Imports System.Collections.Generic Module Module1 Sub Main() Dim atributosPersona As New Dictionary(Of String, String) atributosPersona.Add("pNombre", "Lizzy") atributosPersona.Add("pApellido", "Mendivil") Dim p As New clsPersona For Each atributo In atributosPersona Dim pf As PropertyInfo = p.GetType.GetProperty(atributo.Key) pf.SetValue(p, atributo.Value, Nothing) Next Console.WriteLine("Nombre: {0}", p.pNombre) Console.WriteLine("Apelllido: {0}", p.pApellido) End Sub Public Class clsPersona Private strNombre As String Private strApellido As String Public Property pNombre() As String Get Return strNombre End Get Set(ByVal value As String) strNombre = value End Set End Property Public Property pApellido() As String Get Return strApellido End Get Set(ByVal value As String) strApellido = value End Set End Property End Class End Module
HaPPy Coding =)
No comments:
Post a Comment