FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Como obtener las variables de un objeto
Hola amigos mi consulta es la siguiente. dado un objeto cualquiera
ej : Como puedo obtener una referencia a las variables declaradas en este algo asi como Var M : MyObject; .. .. for i:=0 M.Variables.Count-1 do ... . . Ando en busca de un simil de components o controls, pero que me liste las variables contenidas en mi objeto (no los componentes ni los controles). Cualquier sugerencia se agradecera. Saludos. |
#2
|
||||
|
||||
Hola,
Hasta donde yo llego es posible acceder a las propiedades de un objeto siempre que estas sean públicas; es posible enumerar sus propiedades, "recorrerlas", acceder a sus valores e incluso cambiarlos, pero, tratando con variables... no se me ocurre la forma. Además creo que lo que planteas es cuando menos raro. Quiero decir que es posible que existan otras soluciones para lo que quieres conseguir. Si lo explicas tal vez alguien pueda echarte un cable. |
#3
|
|||
|
|||
Dec gracias por tomarte la molestia de responder a mi incognita lo que puedo agregar a mi consulta es lo siguiente "dado un objeto cualquiera, recorrer sus variables una a una" .
Tengo una funcion que realiza un proceso sobre las variables (dependiendo de su tipo) de los objetos , pero cada objeto que proceso aunque decienden de la misma clase , en su implementacion cada uno tiene sus propias variables. Ejemplo :
Espero haber aclarado mas el asunto. Saludos |
#4
|
||||
|
||||
Hola,
Pues no sé que se pueda acceder a las variables de un objeto, aun siendo estas públicas. Lo que sí sé es que puede accederse a las propiedades de un objeto, mediante Run-time Type information. Tal vez deberías plantearte añadir propiedades a tus objetos. O tal vez algún otro compañero sepa darte una respuesta mejor. |
#5
|
|||
|
|||
Gracias por tus comentarios DEC, ya habia intentado por el lado de la RTTI pero no he logrado encontrar la solucion.
Espero que a alguien se le ocurra algo. Saludos |
#6
|
||||
|
||||
Con RTTI me parece que sólo podrás acceder a la propiedades publicadas (published). Por curiosidad, ¿qué es lo que quieres hacer? Vamos, que no es usual querer hacer algo así en un lenguaje como delphi.
// Saludos |
#7
|
|||
|
|||
Hola Roman, la finalidad es que me estoy fabricando un recolector de basura, no lo queria mencionar porque las respuestas se podrian desvirtuar (ej: se podria prestar para que hicieran comentarios de como maneja la memoria delphi, los modelos de memoria, que delphi no necesita un garbage collector,etc. y ese tipo de cosas) y apuntar a otro punto el cual tengo cubierto.
Vamos Roman como en esa gran sabiduria acumulada de mas de 11.000 mensajes no habra algo que me ayude . Saludos. |
#8
|
|||
|
|||
Roman y Dec se han fijado en el Code Explorer de Delphi 7?
hay tres secciones private public published En esta ventana muestra las variables que quiero recuperar, si el IDE de delphi lo puede mostrar y el IDE esta hecho en Delphi enconces se puede hacer , el problema es como. Saludos. |
#9
|
||||
|
||||
Hola,
Bueno. Si no quieres que entremos, pues no entramos. Pero, se supone que un objeto que se encarga de inicializar ciertas variables debe encargarse de su destrucción. Para eso están los métodos constructores y destructores de un objeto. ¿No? Entonces el "garbage colection" que planteas (según a mí se me ocurre) en qué consiste, ¿en liberar determinadas variables de un objeto (o varios) desde fuera de estos? ¿Pero no es más natural destruir los propios objetos que a su vez se encargarán de liberar las variables que sean menester? Ahora, que si no quieres entrar... no entramos. |
#10
|
|||
|
|||
Ves Dec que sucedio lo que yo dije, no queria caer en la discucion de quien debe o no liberar la memoria (en lo cual estamos totalmente de acuerdo) y porque es necesario un recolector de basura. ahora estoy obligado a explicar mas en detalle lo que intento hacer, pretendo liberar de la memoria variables u objetos Activex que estan declarados dentro de un formulario o un objeto cualquiera. y tu me diras pero no se supone que estos Activex se liberan por si solos o con un metodo dispose? y yo te dire que lo que sucede es que estos activex generan un memory Leak ya que no estan muy bien implementados o carecen de un dispose y encontre una forma de liberarlos, pero quiero automatizar el proceso y no estar referenciandolos uno a uno, es por eso que necesito recorrer cualquier objeto y comprobar si hay en el una variable u objeto de tipo "activex" y si es asi lo libero.
Saludos. |
#11
|
||||
|
||||
El truco 42 se titula: "Mostrar las propiedades de uncomponente en Runtime", aunque vale perfectamente para cualquier otro objeto.
Usa RTTI que es la única forma de hacerlo sin programar nada especial (NOTA1); Lo más importante para hacerlo así es que las propiedades que deseas recorrer sean published. En el caso que has puesto:
Habría que modificarlo para que fuera así: Aunque habría que saber más de lo que necesitas hacer. (NOTA1) La otra opción, si consigues que todas las clases deriven de una clase base, es programar en la clase Base una lista de variables/propiedades y que cada una de las clases derivadas añada las suyas en el Create (por ejemplo). En la clase basedeberás programar el método que recorra la lista y te las devuelve (no se si me explico...)
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. Última edición por Neftali [Germán.Estévez] fecha: 07-06-2007 a las 17:26:43. |
#12
|
|||
|
|||
Cita:
Saludos... |
#13
|
||||
|
||||
Cita:
No es lo mismo. Aunque no lo se de cierto, estoy casi seguro de que maeyanes tiene razón. En ese caso se hace "parseando" los .PAS
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#14
|
||||
|
||||
Más que el Code Explorer, supongo que se refiere al Browser. Y éste sí que muestra las secciones privadas, protegidas, públicas y publicadas, aun en ausencia del .pas
¿Cómo hace esto? // Saludos |
#15
|
||||
|
||||
Cita:
Yo creo que debe hacer algo similar a este. (1) Pulsad Load para cargar el PAS. (2) Pulsad el botón que pone "Code Tree".
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#16
|
||||
|
||||
Cita:
Cita:
// Saludos |
#17
|
||||
|
||||
Cita:
No lo había subido al FTP, porque no es algo que tenga interés fuera de este hilo; De todas formas he creado una carpeta temporal para este tipo de cosas; link.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#18
|
||||
|
||||
Cita:
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Crear variables de tipo Objeto!! | rodrigo19 | Varios | 2 | 26-05-2007 02:40:14 |
Obtener lista de procedimientos de un objeto | JavierSotillos | OOP | 15 | 09-06-2006 17:53:52 |
Como crear un objeto en Delphi ? | Delphiboy | OOP | 3 | 31-01-2006 20:39:15 |
Como guardar un objeto en un archivo ? | cmurua71 | OOP | 7 | 18-11-2005 21:26:30 |
Obtener Handle de un objeto | senpiterno | Varios | 6 | 22-04-2004 15:21:40 |
|