Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

récuperer nom de la méthode en cours d'exécution

5 réponses
Avatar
Stéphane ANDRE
Bonjour,
je voudrais savoir s'il est possible de récupérer, à l'exécution le nom de
la méthode en cours d'exécution ainsi que le nom de la classe associée.

Est-il également possible de récupérer les même informations mais dans le
cadre de l'appellant.

Ex: je souhaite créer une méthode générique d'affichage de message d'erreur
et voudrait qu'elle m'affiche le nom de la classe et de la méthode qui l'à
appellé pour faciliter le déboggage.

Merci d'avance.

5 réponses

Avatar
Fabien Bezagu
Stéphane,

Je pense que la classe StackTrace et ce qu'elle permet d'obtenir comme info
peut t'aider :

StackTrace st = new StackTrace();
StackFrame sf = st.GetFrame(0);
MethodBase mb = sf.GetMethod();
// Ensuite, il y a plein d'info dans l'objet mb

Les namespace à utiliser sont System.Diagnotics et System.Reflection.

Fabien


"Stéphane ANDRE" a écrit dans le
message de news:
Bonjour,
je voudrais savoir s'il est possible de récupérer, à l'exécution le nom de
la méthode en cours d'exécution ainsi que le nom de la classe associée.

Est-il également possible de récupérer les même informations mais dans le
cadre de l'appellant.

Ex: je souhaite créer une méthode générique d'affichage de message
d'erreur
et voudrait qu'elle m'affiche le nom de la classe et de la méthode qui l'à
appellé pour faciliter le déboggage.

Merci d'avance.




Avatar
Francois Muller
Bonjour

"Stéphane ANDRE" a écrit dans le
message de news: 66783921-B58A-493A-B538-
je voudrais savoir s'il est possible de récupérer, à l'exécution le nom de
la méthode en cours d'exécution ainsi que le nom de la classe associée.



Pour la classe, cela ne pose pas de problème, il suffit de passer un
paramètre avec l'instance de la classe appelante (this), et d'utiliser la
méthode GetType pour obtenir un System.Type

Exemple :

void MyAlertFunction(object caller, string Message)
{
System.Type typ = caller.GetType ();
Debug.Write(typ.FullName);
}

Pour la méthode,c'est un peu plus tordu,on peut utiliser les objets
StackFrame et StackTrace de System.Diagnostics
(valable aussi pour la classe, si on ne veut pas passer un param
supplémentaire), avec quelque chose dans le style

StackFrame stackFrame = new System.Diagnostics.StackFrame(true);


StackTrace stackTrace = new StackTrace(stackFrame);

en remontant dans le stackframe



F.
Avatar
Francois Muller
"Fabien Bezagu" <fbezagu_at_novacor_dot_fr> a écrit dans le message de news:

Stéphane,
StackTrace st = new StackTrace();
StackFrame sf = st.GetFrame(0);



Ici, c'est GetFrame(1) qu'il faut utiliser (il veut savoir la fonction qui
appel sa fonction ;-))

F.
Avatar
Fabien Bezagu
oups oui exact....merci d'avoir corrigé !

"Francois Muller" a écrit
dans le message de news: %

"Fabien Bezagu" <fbezagu_at_novacor_dot_fr> a écrit dans le message de
news:
Stéphane,
StackTrace st = new StackTrace();
StackFrame sf = st.GetFrame(0);



Ici, c'est GetFrame(1) qu'il faut utiliser (il veut savoir la fonction qui
appel sa fonction ;-))

F.




Avatar
Stéphane ANDRE
Merci beaucoup à tous pour vos réponses.
Le forum C# est vraiment très réactif.

"Francois Muller" a écrit :

Bonjour

"Stéphane ANDRE" a écrit dans le
message de news: 66783921-B58A-493A-B538-
> je voudrais savoir s'il est possible de récupérer, à l'exécution le nom de
> la méthode en cours d'exécution ainsi que le nom de la classe associée.

Pour la classe, cela ne pose pas de problème, il suffit de passer un
paramètre avec l'instance de la classe appelante (this), et d'utiliser la
méthode GetType pour obtenir un System.Type

Exemple :

void MyAlertFunction(object caller, string Message)
{
System.Type typ = caller.GetType ();
Debug.Write(typ.FullName);
}

Pour la méthode,c'est un peu plus tordu,on peut utiliser les objets
StackFrame et StackTrace de System.Diagnostics
(valable aussi pour la classe, si on ne veut pas passer un param
supplémentaire), avec quelque chose dans le style

StackFrame stackFrame = new System.Diagnostics.StackFrame(true);


StackTrace stackTrace = new StackTrace(stackFrame);

en remontant dans le stackframe



F.