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