kiboumz
Messages postés120Date d'inscriptionmercredi 17 septembre 2003StatutMembreDernière intervention18 mai 2007
-
12 avril 2007 à 22:44
kiboumz
Messages postés120Date d'inscriptionmercredi 17 septembre 2003StatutMembreDernière intervention18 mai 2007
-
13 avril 2007 à 19:28
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 ...
Julien237
Messages postés883Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention 3 mars 20097 12 avril 2007 à 23:58
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...
kiboumz
Messages postés120Date d'inscriptionmercredi 17 septembre 2003StatutMembreDernière intervention18 mai 2007 13 avril 2007 à 15:47
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 ...
Julien237
Messages postés883Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention 3 mars 20097 13 avril 2007 à 17:44
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...
Julien237
Messages postés883Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention 3 mars 20097 13 avril 2007 à 18:47
Ha j'ai trouvé pour le byval/byref,
Lorsque tu demande
Dim mb
As System.Reflection.MethodInfomb = 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