https://foro.gambas-es.org/viewtopic.php?f=5&t=7972
-----------------------------------
tincho
Viernes, 17 Abril 2020, 16:38

Recorrer Las Propiedades De Una Clase [SOLUCIONADO]
-----------------------------------
Hola a todos.
¿Alguien sabe como recorrer las propiedades de un objeto creado con una clase?
¿Como se hace enumerable una clase?
Saludos.


-----------------------------------
vuott
Viernes, 17 Abril 2020, 17:43

Re: Recorrer Las Propiedades De Una Clase
-----------------------------------
Puedes ser más claro ?  :|


-----------------------------------
jguardon
Viernes, 17 Abril 2020, 20:08

Re: Recorrer Las Propiedades De Una Clase
-----------------------------------
Supongo que quieres enumerar las propiedades de una clase pero una vez que se instancia. Antes de instanciarla no creo que sea posible.

Una vez instanciada la clase, puedes enumerar sus símbolos de esta forma:

[code linenumbers=false syntax=gambas]Private myclase as New ClaseBonita

' Dentro de algún método enumeramos:
Dim obj as String

For Each obj In myclase.Symbols
    If myclase.Symbol.Kind(Class.Property) Then
        Print obj;;
    End If
Next[/code]

Más o menos sería así, pero el resultado podría contener además variables, constantes, etc, por lo que tendrás que filtrar según tus preferencias como he hecho en la cláusula if then. No lo he probado, escribo de memoria.


Saludos


-----------------------------------
tercoIDE
Viernes, 17 Abril 2020, 20:55

Re: Recorrer Las Propiedades De Una Clase
-----------------------------------
Esto recorre las propiedades de una clase y devuelve sus valores. La inversa es similar pero con "SetProperty". XML ready!!!
[code linenumbers=false syntax=gambas]
Dim propiedad As String, propiedades As String[]
    
    propiedades = Object.Class(UnObjeto).Symbols
    
    
    For Each propiedad In propiedades
        ' el Try es porque si "propiedad" no es una Property, sino un Metodo, da error
       Try Debug propiedad, Object.GetProperty(UnObjeto, propiedad) 

    Next
    [/code]


-----------------------------------
tincho
Viernes, 17 Abril 2020, 21:16

Re: Recorrer Las Propiedades De Una Clase
-----------------------------------
Ya esta, si efectivamente como dice Jesús se pueden ver que propiedades tiene una "clase" pero no del objeto creado a partir de esta.
La ayuda vino de el programa [url=https://foro.gambas-es.org/viewtopic.php?f=5&t=5538]ExploraClases que hizo Shordi.
El código que use es básicamente el siguiente.
1) Obteniendo la lista de variables y propiedades de la clase
[code linenumbers=false syntax=gambas]

               c = Classes["NombreDeLaClase"]
                For Each s In c.Symbols
                    Select c[s].Kind
                        Case Class.Variable
                         tvar.Add(c[s].Name)

                        Case Class.Constant

                        Case Class.Event

                        Case Class.Property'
                         tpro.Add(c[s].Name)


                        Case Class.Method

                    End Select
                Next
[/code]

2) consultar en el objeto una propiedad o variable por su nombre.
[code linenumbers=false syntax=gambas]
            For Each pr In tpro
                Print Object.GetProperty(obj, pr)
            Next
[/code]
Eso es todo.
Saludos.


-----------------------------------
tincho
Viernes, 17 Abril 2020, 21:23

Re: Recorrer Las Propiedades De Una Clase
-----------------------------------
[quote user="tercoIDE" post="47951"]Me parece que esto puede ayudar ....
Static Function GetProperty ( Object As Object, Property As String ) As Variant
Gets the value of an object property dynamically.
    Object is the object reference.
    Property is the name of the property.
This method returns the value of the property.[/quote]
Si , esto es para consultar los datos, es la segunda parte, la primera es averiguar el nombre de las propiedades.
Saludos.


