Bueno esta vez si que casi me suicido de la colera por no poder hacer una tonteria que en Visual Foxpro la hacia parpadeando con macrosustitucion, bueno el problema era este:
Se tienen que ejecutar los metodos de objetos que se pasan como parametros hacia la clase X en el constructor el problema viene en que no se sabe de que clase se trata ya que las clases varian vengaque voy a explicar mejor de que trata este proyecto que me ha obligado a leerme un par de capitulos de libros sobre Reflection y en cima despues de todo termino siendo tan sencilla la codificacion que :@ pero valio la pena el aprendizaje (eso pasa cunado te crees saber todo y sabes que siempre te falta)
La cosa es que estoy desarrollando una forma facil de hacer formularios para mis sistemas de gestion como es sabido por todos siempre estan los mantenimientos de tablas (agregar, quitar, modificar) estos mantenimientos los hago con dos formularios uno donde muestro una grilla (cuadricula, datagrid, o como lo llamen) y el otro que aparece cuando se preciona en Agregar o modificar ya con sus textbox, combos, checks y demas objetos que correspondan. Como veran las acciones son siempre las mismas si se llamo de agregar pues insertar el registro, si se llamo de editar pues actualizar el registro, si se preciona eliminar pues mostrar el registro y preguntar si lo quiere borrar y ejecutar la respuesta, la cosa es que como trabajo en capas se me hace facil hacer que cada el agregar ejecute el metodo de la capa de negocios que valida y llmaa al agregar con los parametros requeridos, pero lo que se queria era sin saber de que clase era se jecutar el metodo «vertodos» que esta en todas mis clases de cierta capa y lo que hace es que me trae todos los registros (esto por decir algo ya que podria ejecutar traersolo o traerXregistros que son funciones implemenetadas en todas las clases, se que deberia haber usado generics para eso pero bueno el generador de estas clases esta hecho y ya me dare tiempo en reprogramarlo) bueno pues al grano, como soy medio bruto no hallaba la manera de hacerlo hasta que despues de una tarde frustracion y muchas horas de estudio y pruebas y requetepruebas he llegado a esto:
Type t = para.ONegocios.GetType();
MethodInfo metodo = t.GetMethod("vertodos");
Object objreflex = metodo.Invoke(para.ONegocios, null);
dsdatos = (DataSet)objreflex;
Lo voy a explicar, lo primero creo un tipo del objeto «ONegocios» que en verdad esta definido de esta manera en a clase parametros:
private Object oNegocios;
Como ven no se tiene el tipo exacto solo un objeto de tipo Object generico por eso en «t» creo el tipo verdadero que corresponde a mi clase de negocios.
public Object ONegocios
{
get { return oNegocios; }
set { oNegocios = value; }
}
COn la linea MethodInfo metodo = t.GetMethod(«vertodos»); pues no hay secretos en esto le estoy diciendo que me creo un objeto de tipo MethodInfo que luego uso para invocar en la linea siguiente y todo funciona.
Solo una cosa si tu metodo tiene parametros y no es estatico pues no hagas lo que yo y eso me tardo unos minutos mas desperdiciados:
Object objreflex = metodo.Invoke(null, null);
eso puse y me daba un error del que no hay mucho que leer en internet y te dira esto «Non-static method requires a target» (yo uso VS en ingles por que esa licencia tengo) lo que pasa es que me esta diciendo que no puede ejecutar sin referencia de objeto o parametros para los parametros se tiene que usar un array de objetos que representen a cada valor de tus parametros, esto de los parametros lo toco en otro post.
Bueno, de felicidad de haber hecho funcionar mi crerador de formularios de mantenimientos me voy a por una cerveza.
Bueno… interesante tu post, solo te recomiendo que si quieres ser un poco mas profesional trates de mejorar tu ortografía, pues tienes unos errores que son imposibles dejar pasar («profecional», «apacionado») ????
Muy buena la información, gracias por compartir tus conocimientos, y tienes razón, con el poco tiempo que la gente que hace software dispone, y todavía uno lo invierte para que gente se beneficie, pero hay gente que en lugar de agradecer, se fija en pelotudeces.
Hurrah, that’s what I was seeking for, what a stuff! existing here at this weblog, thanks admin of this website.
Hi, just wanted to say, I enjoyed this article. It was
inspiring. Keep on posting!