![]() |
acceso a las propiedades de un objeto
Hola a todos, tengo una duda a ver si me podeis orientar un poco:
supongamos que tengo una función que pretende comparar dos objetos pasados por parámetro. La función tiene además un tercer parámetro que es una cadena que indica el nombre de la propiedad común a los objetos en función de la cual se hará la comparación. Sería algo asi:
La duda es simplemente si hay alguna manera en delphi de acceder a los campos de un objeto de esta manera. Gracias de antemano por la ayuda. Un saludo |
Hola gushynet,
Hay una manera. La solución es que dichas propiedades sea publicadas, es decir que sean declaradas published. De este modo mediante RTTI se puede acceder a dichas propiedades. Para saber más sobre RTTI sugiero una búsqueda, hay hilos que tratan el tema. Saludos, |
Hay otro método que quizás te sirva:
Lo primero es definir una función de comparación, tal y como hace la VCL de delphi: esto viene a decir que eso será una función que recibe 2 objetos y devuelve un número enteronormalmente: -1 si obj1 < obj2 0 si obj1 = obj2 1 si obj1 = obj2 Ahora se trataría de crear tantas funciones como posibilidades tengas (este es el rollo y puede que sea demasiado... no lo sé):
Estas funciones son muy fáciles de implementar y muy rápido, ahora tu algoritmo de ordenación pregunta al usuario cómo quiere ordenarla y llama a la función concreta:
Así es como funciona el método Sort del TObjectList, y si usas un TObjectList para almacenar tus objetos, sólo necesitas implementar las funciones de ordenación y llamar a ObjectList1.Sort. Espero te sirva. |
¡Hola!
No sé si aún es tiempo, pero mi sugerencia sería apoyarte en la función GetPropValue, si es que las propiedades a comparar son publicadas.
Anexé un archivo con el ejemplo completo. Saludos. Al González. :) |
gracias por la ayuda, es lo que he hecho, como me sugirio Delphius he mirado documentacion sobre rtti, concretamente el fichero TypInfo.
Lo que estoy intentando es realizar una operacion de asignacion generica. Ahora estoy intentandolo con las propiedades que son objetos a su vez, cosa que veo bastante compleja pero todo es ponerse. Por cierto, en tiempo de ejecucion solo puedo obtener informacion de las propiedades publicadas como he leido en la documentacion que he encontrado? o hay alguna manera de obtener informacion de las variables declaradas en la seccion private de una clase? Gracias. Un saludo. |
solo published.
Saludos |
La franja horaria es GMT +2. Ahora son las 07:39:12. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi