Gambas France BETA


Pas de compte ? Incription

Comment lister les méthodes d'une classe ?

1
AuteurMessages
Askylh#1 Posté le 20/3/2013 à 11:54:19
Bonjour,

Je tourne en rond depuis qq temps sur ce sujet.

Dans une class info.class/ex :
1- je voudrais charger un tableau avec les classes du projet en cours,
2- puis pour chacune des classes charger un tableau avec les méthodes décrites dans cette classe.

Pour le point 1 je fais qq chose du genre
dim cls class

for each cls in classes
debug cls.name
end

ça marche, avec cette boucle je pourrai par la suite charger un tableau de string contenant tous les noms des class

Mais comment puis je utiliser ce nom stocké dans une variable tableau pour accéder aux méthodes de la classe ?

Merci pour votre aide
Prokopy#2 Posté le 20/3/2013 à 13:57:41
Kinder PinguiSalut Askylh,

L'objet Class possède une propriété Symbols contenant tous les symboles de cette classe. Tu peux ensuite avoir plus d'information à propos de ce symbole en utilisant l'objet Class comme un tableau, comme ceci :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
DIM tClass AS Class
DIM tSymbol AS STRING

FOR EACH tClass IN Classes

DEBUG "Classe : "; tClass.Name

FOR EACH tSymbol IN tClass.Symbols

IF tClass[tSymbol].Kind == Class.Method THEN

DEBUG " Méthode : " tClass[tSymbol].Name

ENDIF

NEXT

NEXT


Plus d'infos sur la page de doc : http://gambasdoc.org/help/comp/gb/class?fr&v3 . ;)
La théorie, c'est quand on sait tout et que rien ne fonctionne.
La pratique, c'est quand ça marche mais qu'on ne sait pas pourquoi.
Quand la théorie rejoint la pratique, rien ne fonctionne et on ne sait pas pourquoi.
Askylh#3 Posté le 20/3/2013 à 14:09:23
SUPERBE !

Merci Prokopy.

J'avais bien vu Kind et Symbols dans la doc, mais j'avais pas réussi à m'en dépatouiller.

Pour bien faire d'ailleurs, il faudrait agrémenter la doc de ce petit exemple

J'étais trés loin de l'avoir celui la
If tClass[tSymbol].Kind == Class.Method Then

:)

Merci
Flachy Joe#4 Posté le 20/3/2013 à 21:41:10
Iguane : Il Gambas Uniquement pour Activer ses NEuronesJe sais pas si tu as trouvé cette page de doc : http://gambasdoc.org/help/comp/gb/.symbol?fr&v3 mais les propriétés Signature et Type devrait t'intéresser dans ton idée de lister toutes les méthodes d'un projet...

Bonne continuation !
;) Flachy Joe ;)
Askylh#5 Posté le 21/3/2013 à 11:27:35
Merci Flatchy Joe
En reprenant l'exemple précédent, j'y accède comme ça :

1
2
3
DEBUG " Méthode : " tClass[tSymbol].Name;
DEBUG " Signature : "; tClass[tSymbol].Type
DEBUG " type : "; tClass[tSymbol].Signature


Mais ça ne me donne rien de parlant,ii, b, ...

Je demande ces infos pour mon projet GUTest, on y renseigne, pour l'instant à la main, le nom des méthodes que l'on veut tester,
et je voudrais bien sur l'automatiser.

En fait je cherche à avoir le comportement du navigateur d'aide :
1)Il sépare les classes locales du projet.
2)Il sépare les méthodes décrites localement dans la classe sélectionnée.
(impécran par Shutter)


Merci pour votre aide
Flachy Joe#6 Posté le 21/3/2013 à 18:55:48
Iguane : Il Gambas Uniquement pour Activer ses NEuronesSalut,
les signature indiques les types de cette façon :

b pour boolean
i pour integer
l pour long
g pour single
f pour float
s pour string
o; pour object
etc...

Pour une objet défini, le nom est entier, commence par un majuscule et termine par un point-virgule, Form; ou Long[]; par exemple.

Pour faire la différence entre les méthodes locales et héritées, je pense que tu peux soustraire à la liste des méthodes de la classe celles de son parent (Class.Parent) en vérifiant si le parent est natif (Class.Native) où issu d'un composant (Class.Component). Par contre tu supprimeras de fait les méthodes surchargée...
;) Flachy Joe ;)
Askylh#7 Posté le 21/3/2013 à 22:58:50
hum...
Je me demande si une analyse de syntaxe du code ne serait pas plus adapté pour mon cas...
Je vais travailler dans ce sens pour l'instant,
le coté OO de Gambas reste plutôt du coté ... obscur : )

Merci en tout cas
1