begin process at 2012 02 14 06:50:21
  Trouver un code source :
 
dans
 
Accueil > Forum > 

VB.NET et VB 2005

 > 

Windows

 > 

Formulaire / Winforms / Controls

 > 

Obtenir le nom de la méthode


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Obtenir le nom de la méthode

jeudi 12 avril 2007 à 22:44:41 | Obtenir le nom de la méthode

kiboumz

Bonjour,

J'aimerais pouvoir accèder à certaines caractéristiques d'une méthode.

J'ai commencé à regarder du côté de system.reflection.methodbase.GetCurrentMethod()

Cela me donne beaucoup d'info, mais j'ai de la difficultés à filter l'information.

1. Je voudrais le nom de la méthode : MethodBase.Name
2. Je voudrais la porté d'une méthode (public / private) : Je sais pas comment ...
3. Je voudrais le type méthode ou fonction : Je sais pas comment ...
4. Je voudrais le nom des paramètres : MethodBase.GetParameters(index).Name
5. Je voudrais la valeur des paramètres : Je sais pas comment ...
6. Je voudrais savoir si les paramètres sont ByVal ou ByRef : Je sais pas comment ...

En fait en premier je voudrais reconstituer le nom de la méthode / fonction et ensuite obtenir les valeurs des paramètres ...

Merci
a+
jeudi 12 avril 2007 à 23:58:04 | Re : Obtenir le nom de la méthode

Julien237

Salut,
Alors pour la portée d'un méthode, tu as
MethodBase.Attributes ou bien encore plus simple MethodBase.IsPublic, IsPrivate....

Pour le type, on peut utiliser une astuce. MethodBase ne contient pas cette information, mais bien MethodInfo. Il s'agit d'utiliser les informations de MethodBase pour retrouver le MethodInfo par le type de la classe déclarant MethodBase :

        Dim mb As System.Reflection.MethodBase = System.Reflection.MethodBase.GetCurrentMethod()
        Dim mbArgTypes(mb.GetParameters.Length - 1) As System.Type
        For i As Integer = 0 To mb.GetParameters.Length - 1
            mbArgTypes(i) = mb.GetParameters(i).ParameterType
        Next
        MsgBox("Type de renvoi : " & mb.DeclaringType.GetMethod(mb.Name, mbArgTypes).ReturnType.ToString)

Simplement, je recherche une méthode ayant le même nom et la même signature que la MethodBase en cours.

Pour ce qui est des paramètres, je ne comprends pas bien ce que tu veux dire. Les objets MethodBase et MethodInfo donne des informations sur les méthodes en général, sur leur code, mais pas sur "l'instance de la méthode en cours d'exécution" si je puis dire...
Au mieux, tu peux avoir les valeurs par défault des paramètres (mb.GetParameters(i).DefaultValue), mais pour leurs valeurs en cours, il faudra trouver autre chose...

Pour le (byref/byval) des paramètres, je trouve pas, mais j'en suis étonné... Pourtant on doit chauffer, ca doit pas être bien loin...


Julien.
vendredi 13 avril 2007 à 15:47:52 | Re : Obtenir le nom de la méthode

kiboumz

Salut,

En fait, pour les paramètres, je voulais avoir leurs valeurs pour la raison suivante :

La raison pourquoi je veux reconstituer la fonction est que dans un try catch quand j'obtiens une erreur j'appel une fonction EcrireErreur.

Je passe à cette fonction : System.Reflection.MethodBase.GetCurrentMethod()

Ensuite, je voudrais écrire dans un fichier le plus d'information relative à l'erreur. En autre, le nom de la méthode qui a crée l'erreur et la valeur de ces paramètres ...

Je ne voulais pas avoir à passer par exemple EcrireErreur(NomMethode, tValeursParametres) ... Je trouve cela plus générique si je ne peux que passer une seule valeur ...

Si vous avez des suggestions, n'hésitez pas!

Merci
a+
vendredi 13 avril 2007 à 17:44:11 | Re : Obtenir le nom de la méthode

Julien237

Mais, le System.Reflection.MethodBase.GetCurrentMethod(), tu le passe en paramètre de EcrireErreur alors ?
Sinon tu obtines la Méthode EcrireErreur et non la méthode en cours pendant l'erreur...
Je réfléchis pour les paramètres, mais je pense de moins en moins que ce soit possible, les paramètres sont traités comme des simples variables locales popées de la pile en entrant dans la méthode, je sais pas si y'a un moyen de les distinguer et des les récup comme ca...


Julien.
vendredi 13 avril 2007 à 17:52:03 | Re : Obtenir le nom de la méthode

kiboumz

Salut,

Effectivement, je passse le System.Reflection.MethodBase.GetCurrentMethod() à EcrireErreur.

Pour les paramètres, peut-être qu'avec le Reflection on peut pas, mais il y a peut-être un autre moyen ...

Merci
a+
vendredi 13 avril 2007 à 18:47:47 | Re : Obtenir le nom de la méthode

Julien237

Ha j'ai trouvé pour le byval/byref,
Lorsque tu demande

Dim mb As System.Reflection.MethodInfo

mb = System.Reflection.MethodBase.GetCurrentMethod.DeclaringType.GetMethod(System.Reflection.MethodBase.GetCurrentMethod.Name)

Dim paramlist As System.Reflection.ParameterInfo()

paramlist = mb.GetParameters

MsgBox(paramlist(0).ParameterType.ToString)

Selon que le paramètre soit byref ou byval il y a l'opérateur & derrière le type écrit comme l'opérateur de pointeur en C finalement...
Donc pour ByRef param as Integer -> System.Int32&
ByVal param as Integer -> System.Int32


Julien.
vendredi 13 avril 2007 à 19:28:37 | Re : Obtenir le nom de la méthode

kiboumz

Salut,

Si je résume j'ai ceci comme code :

            lcError &= IIf(poMethodBase.IsPrivate, "Private ", "Public ")

            lcError &= poMethodBase.Name & " ("
            'Dim mbArgTypes(poMethodBase.GetParameters.Length - 1) As System.Type
            'For i As Integer = 0 To poMethodBase.GetParameters.Length - 1
            '    mbArgTypes(i) = poMethodBase.GetParameters(i).ParameterType
            'Next
            'lcError &= poMethodBase.DeclaringType.GetMethod(poMethodBase.Name, mbArgTypes).ReturnType.ToString

            For liParameters As Integer = 1 To poMethodBase.GetParameters().Length
                If liParameters > 1 Then
                    lcError &= ", "
                End If
                lcError &= IIf(Right(poMethodBase.GetParameters(liParameters - 1).ParameterType().ToString(), 1) = "&", "ByRef ", "ByVal ")
                lcError &= poMethodBase.GetParameters(liParameters - 1).Name & " As "
                lcError &= poMethodBase.GetParameters(liParameters - 1).ParameterType.ToString()
                lcError = IIf(Right(poMethodBase.GetParameters(liParameters - 1).ParameterType().ToString(), 1) = "&", lcError.Substring(0, lcError.Length - 1), lcError.Substring(0, lcError.Length))
            Next
            lcError &= ")"
            lcError &= Environment.NewLine()

Le code en commentaire est celui supposé me dire si c'est une fonction ou un sub, mais cela ne fonctionne pas.

Pour l'instant si j'ai une fonction par exemple qui appel ma méthode : private sub Main(byval test1 as string, byref test2 as integer)

Je la reconstruit comme suit : Private Main (ByVal test1 As System.String, ByRef test2 As System.Int32)

Donc, il me manque le type (fonction ou méthode) et si possible, faudrait trouvé une manière de pouvoir avoir les valeurs des paramètres ...

Merci!
a+


Cette discussion est classée dans : name, obtenir, méthode, paramètres, methodbase


Répondre à ce message

Sujets en rapport avec ce message

Obtenir le nom des paramètres d'une procédure stockée [ par IdrilElendil ] Bonjour,J'aimerais savoir comment il faut faire pour obtenir la liste des noms des paramètres d'une procédure stockée se trouvant sur un serveur SQL-S Drawline et paramètres [ par chewbaka62 ] Bonsoir, je suis en train de réaliser un petit programme graphique représentant une horloge analogique.Les aiguilles sont faites en utilisant la méth Obtenir la liste des meilleurs joueurs [ par ShayW ] Bonjour à tous J'ai deux tableaux 1 avec liste des joueur tbljoueur avec comme champs codejoueur (clé) name surname 2 un tableau des résultat Paramètres à mémoriser DANS le code d'une macro Excel [ par Iragael ] Bonjour,je viens de réaliser une macro d'archivage auto de fichier incluant une date dans le nom de fichier et n'intervenant que selon un rythme prédé Attendre entre 2 actions [ par kiboumz ] Bonjour,J'aimerais savoir comment faire pour attendre un certain lap de temps entre 2 actions. J'avais pensé utilisé la méthode sleep (de thread), mai Problème de références [ par azerty25 ] Bonjour J'aimerai pouvoir assigner à une variable la référence d'un objet de l'arraylist afin de pouvoir modifier cet objet grâce à cette variable. L [VBScript] Ajout de méthode avec FSO ? [ par Coke Hax ] Salut !Je suis nouveau ici, mais je fais du VBScript depuis environ un an et demi.Je me demandais si c'était possible de créer une nouvelle méthode av Suppresion d'un fichier contenant une date [ par spike13127 ] Bonjour, voila je travail sur une application sur Excel, et j'ai un problème.Voilà mon problème moi j'aimerai bien qu'a chaque fois que j'enregistre m Plusieurs paramètres dans une propriétées. [ par DavidWhitewater ] Bonjour à tous, Certaine propriétés ont plusieurs paramètres (par exemple dans la catégorie 'disposition' la propriétées 'Location' possède 'x' et 'y' Quel méthode de connexion pour une base access ? [ par Robinwood01 ] BonjourJe me remet a programme en VB 6 après avoir arrêté quelques temps.Je dois faire un programme avec une base access pour gèrer le personnel d'une


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,123 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales