Reflection o reflexion: una explicacion

El enlace para descargar el codigo fuente del proyecto esta al final.

Veamos si has llegado hasta aquí de seguro sabes que es reflection y talvez no sepas para que sirve o estas investigando algo sobre eso, pues yo voy a intentar explicar desde el punto de vista de crear una aplicación que me permita ver los métodos de una dll, esto solo es un ejemplo y no es funcional para todos pues ya veraz porque mas adelante.

El uso de reflection puede aplicarse en un sin numero de cosas como analizar librerías, crear algo genérico para clases que sabes como se comportan vamos a un ejemplo, tenemos un proyecto dividido (una palabra con tres “d” jejeje) en capas y una de ellas es en la que están los métodos agregar, modificar, eliminar, etc. de todas las entidades de nuestro proyecto y todas funcionan de una manera determinada, todas poseen un constructor estándar (el mismo para todos) digamos que siempre que se instancia cualquier objeto de esa capa siempre se mandan los mismos parámetros y los métodos insertar, modifica, eliminar, devolveruno, devolver todos siempre tienen como parámetro un objeto de tipo de la clase a la que corresponder, me explico si tengo la entidad Clientes en mi capa de negocios tengo un objeto BClientes que implementa los métodos de agregar, modifica y eliminar a cada uno de ellos siempre le paso un objeto del tipo Clientes para luego ya dejar que los métodos ejecuten las sentencias de correspondientes para grabar los datos pasados al servidor de datos (el como hace esto no es importante pues lo hace y esta encapsulado) así también tendría para mi clase Proveedores un objeto BProveedores con lo mismo y si tengo muchas mas clases pues todas funcionan de la misma manera.

Si quisiera hacer un solo formulario que creara automáticamente los mantenimientos de dichas clases y que ejecute cada uno de los métodos agregar, modificar, eliminar y demás de cualquiera de esas clases tendría el problema que no se de que clase quiero ejecutar dichos métodos pero claro solo tengo el nombre de la clase, pues para eso aplico reflection, solo con el nombre de la clase y el ensamblado puedo hacerlo, se que todas mis clases son estándares (usan lo mismo en cada una de sus operaciones) es allí donde entra reflection.

Pues para eso uso reflection para buscar los tipos de cada clase y llamar a los métodos claro esta esto lo hago grabando en una tabla de la base de datos una especie de configurador de campos donde indico el orden en que se muestran, el ancho del mismo, el tipo de control y bueno otros valores propios de los controles y los agrego por programación al formulario que en si es solo un form vacío y se va poblando de acuerdo a lo especificado en los metadatos (que es axial como llamo a los valores que definen cada campo) pues es lago de explicar y ahora se me hace complicado de separar del proyecto en donde esta pero dejo pendiente que voy a ponerlo en el blog cuando tenga un tiempo libre y lo extraiga del proyecto.

Voy a intentar explicar el uso de reflection en .Net Framework 2.0 para ello he generado un proyecto que al final pondré el link de descarga, el ejemplo trata de que dado espacio de nombres mostrar las clases que lo componen y también mostrar los método de cada clase. (Voy a poner el código en imágenes, bueno para que se vea, el código estará en el proyecto que esta en VS 2005)

Antes que nada se necesita en los using la siguiente línea:

la pantalla inicial del proyecto es esta:

Lo primero bueno el boton seleccionar no tiene nada oculto solo llamo al open file dialog y nada mas y pongo el resultado en el texto de abajo.

Luego en poblar las clases de la libreria vemos esto:


 Veamos esto:

la primera linea

Assembly ensabladodelibreria = Assembly.LoadFrom(this.textBox2.Text);

creamos un objeto tipo Assembly ya que es lo que va a traer la DLL nombrada en el textbox luego en la siguiente linea creamos un array de tipos el que se llena con los tipos que tiene la libreria con GetTypes()

Bueno ya el resto es el foreach que llena el combo con los nombres de las clases.
Para el boton que crea el objeto uso un metodo que tiene dos parametros el nombre de la clase y el nombre de la libreria (el que esta en el textbox) el metodo tiene estas lineas:

Primero hago que dado el nombre de la clase (que se selecciono en el combo) me busque el tipo al que corresponde (esto esta en el foreach) cuando termina tengo en “clase” el tipo de la clase seleccionada, aqui es donde interviene en su totalidad reflection al momento de crear la instancia (CreateInstance), asumo que todas las clases tienen un constructor vacio (si no es asi el programa fallara) como pueden ver al llamar CreateInstance lleno los valores y le paso el array de objetos “argu” en donde deberian estar los parametros del constructor pero como este programa solo funciona con constructores vacios paso un array con cero elementos.

Ahora lo ultimo es mostrar los metodos de esa clase, pues para eso usamos nuevamente reflection de esta manera:

Lo primero obtengo el tipo del objeto creado, despues creo un array tipo MethodInfo que me trae todos los metodos y despues solo muestro todos los metodos en el texbox multiline.

Pues aqui el proyecto

Acerca de

Antes que nada voy a dejar en claro algo, en este blog escribo como se me place, asi que no busquen errores de ortografia o de redaccion que los van a encontrar a montones y tampoco me critiquen o me digan nada sobre ellos pues no tengo intencion alguna de cambiarlos, lo que escribo lo dejo asi y no lo corrijo,claro esta a menos que sean lineas de codigo. Jorge Prado Anci, profesional en desarrollo de aplicaciones, en especial las dirigidas a bases de datos. He trabajado con VFP en casi todas sus versiones, se algo de Java (que no me gusta, es eso solo no me gusta, es bueno pero no me gusta), lo suficiente de PHP como para tener mi propio CMS(es que sigue sin gustarme por la capacidad de desorden que te permite este “lenguaje”), VB lo conoci y lo deteste tanto que lo olvide al punto de no querer adoptar ni por obligacion a su reemplazante VB .NET (por lo mismo de Java) y si C# este si me encanta y aun que conozco bastante bien el lenguaje, la verdad es que me falta mucho del Framework (del 100% estare en un 65%). Soy un apasionado por el orden (en los proyectos de desarrollo), de la programacion en capas (de MVC conozco pero no he aplicado mucho), los estandares y las condenadas pruebas unitaria. Venga creo que ya con esto fue suficiente.

Tagged with: , , , , , ,
Publicado en c#
6 comments on “Reflection o reflexion: una explicacion
  1. greg dice:

    hola! fue interesante tu publicacion, pero no he podido bajar el codigo para realizar practicas, tienes otro servidor donde lo alojes y se pueda descargar?

  2. Shay dice:

    Every weekend i used to go to see this web page, because i wish for enjoyment,
    for the reason that this this web page conations genuinely pleasant funny information too.

  3. Jesús dice:

    Me parece perfecto que hagas caso omiso a tus faltas de ortografía y gramática, coherencia y demás.

    Pero si lo que intentas es hacerte entender deberías prestarle más atención, decir que escribes así porque quieres denota la falta de interés por hacerlo bien, y te resta mucho respeto del usuario ajeno que busca información y pretende obtener ayuda, porque la verdad llegados a la línea 5 dan ganas de cerrar la web y no volver jamás.

    Deberías darle más importancia a hacer las cosas bien, el trabajo bien hecho es doblemente efectivo, y decir que no te da la gana de corregir da a entender que eres totalmente incapaz de hacerlo y por tanto te resta en cuánto a confianza en tus conocimientos…

    Saluditos!

    P.d: No cuesta nada hacer las cosas bien🙂

    • xmeele dice:

      Pues no leas y punto, que acaso yo necesito que lo hagas, me basta con que este ali y punto, asi si algun dia yo lo necesito pues lo uso, que lo lean o no que no regresen a mi blog me da lo mismo yo no publico para que la gente lo lea lo publico para satisfacerme a mi mismo, y no lo corrijo por que no pueda sino por que simplemente no me da la gana.

  4. E dice:

    El hecho de que un profesional no sepa escribir es lamentable, dejando de lado los errores de ortografía de por sí escribís muy confuso y muchas veces no se entienden las ideas, y el hecho de que digas: “escribo como se me da la gana” hace entender que tus posts no están sujetos a críticas lo cual es bastante soberbio y parece como que no querés aprender nada de los demás.

    De todos modos gracias por tratar de explicar este tema.

    • xmeele dice:

      En si, soy muy pero muy arrogante y uso el blog más que para enseñar a los demas lo que sé sino para tenerlo como memoria, pero si en el camino me piden ayuda y puedo hacerlo pues lo hago. Puedes criticar lo que desees si no se trata de la forma de escribir y aún que tengo la intención de escribr como lo dice la RAE (al menos este año), no me preocupo y si a veces escribo muy enrevesado pues pienso en ingles y escribo con la sintaxis en ese idioma por eso algunas veces cambio la posición del verbo y demas componentes de las oraciones, pero no lo hago a proposito y como escribo sin ayudas (editores de texto como MS Word o similares) me queda así, pero bueno estoy viendo un conector de Openofice para WordPress y así quedarán mas lejibles.
      No se preocupe vamos a mejorar en ese aspecto pero los post anteriores quedan tal cual y no los modifico.
      Igualmente gracias por el comentario.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Escribe tu dirección de correo electrónico para suscribirte a este blog, y recibir notificaciones de nuevos mensajes por correo.

Únete a otros 441 seguidores

Blog Stats
  • 304,391 hits
A %d blogueros les gusta esto: