Je recois une erreur lorsuq'au sein d'une même classe, deux méthodes ayant le même nom mais un prototypage différent (pas seulement en type mais en nombre aussi) sont appelées.
J'ai en tête que le compilateur génère une "signature" composée de la fonction + le nombre et le type des paramètres... J'ai cherché, mais je ne trouve rien qui parle de ceci.
Q: deux méthode de même nom n'ont pas le droit de coexister en foxpro ???
Eh non, en VFP, ça ne se passe pas comme ça Fox est un langage non typé.
Donc si ta procedure SetSession peut recevoir 0, 1, 2, ou n paramètres, tu vas écrire une seule procedure, et analyser le nombre et le type de paramètres reçus:
Define Class ma_session As Custom
Procedure setSession( sId, sNom)
Do Case
Case Pcount()=0
This.setSession( _Screen.tools.getNewId() , This.Parent.getUsername() )
Case Pcount()=1
If Vartype(m.sId)="C" && par exemple
This.setSession( sId, This.Parent.getUsername() )
Endif
Case Pcount()=2
If Vartype(m.sId)="C" And Vartype(m.sNom)="C" && par exemple
Local lcRequete As String
lcRequete = "insert ...."
SQLExec(...,lcRequete,...)
ENDIF
Endcase
Endproc
Enddefine
Note au passage que le mot session est un mot réservé (c'est une classe de base de fox), et que ta classe se portera mieux si elle s'appelle ma_session par exemple.
D'autre part, l'utilisation du préfixage des variables mémoires est très fortement recommandée (si par hasard tu as un jour un champ sId sur un curseur ouvert dans le scope de ta procedure, c'est lui qui sera utilisé si tu n'as pas forcé par le préfixage par m. Définis toujours la portée de tes variables: ta variable requete sans définition de portée est donc implicitement private, et il vaut mieux travailler en déclaration locale. Et enfin, puisque fox n'est pas typé, pene à pseudo-typer tes variables dans leur déclaration, ça te facilitera la vie en maintenance par la suite.
__________________________
Atoutfoxement,
Michel AtoutFox, Communauté Francophone des Professionnels FoxPro