IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Obtenir le nom la méthode dans laquelle le code s'exécute ?


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif Avatar de jmnicolas
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2007
    Messages : 427
    Par défaut Obtenir le nom la méthode dans laquelle le code s'exécute ?
    Bonjour,

    existe-t-il une façon en C# d'obtenir le nom de la classe et de la méthode dans laquelle se trouve le code qui s'exécute ? (c'est pour mes logs)

    Un exemple valant mieux qu'un long discours :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class Class1
    {
    	public static void FaireQqChose()
    	{
    		// plein de code ici ...
     
    		if (erreur)
    		{
    			Console.WriteLine("Erreur détectée dans la classe " + cetteClasse + " à l'intérieur de la méthode " + cetteMethode);
    		}
    	}
    }
    où "cetteClasse" me donnerait le nom de la classe en question et "cetteMethode" le nom de la méthode où est survenue l'erreur.

    Notez que j'ai ajouté une difficulté supplémentaire : ma méthode est statique donc je peux pas faire un truc du style this.GetType().ToString() pour récupérer le nom de la classe.

    C'est possible ça ? Bien entendu je peux écrire le nom en dur (ce que je fais actuellement), mais si je fais un refactor les noms ne correspondent plus, et de plus je n'ai pas accès à l'auto-complétion quand je tape le nom des classes et méthodes.

    Voilà, à vos idées

  2. #2
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Citation Envoyé par jmnicolas Voir le message
    Bonjour,

    existe-t-il une façon en C# d'obtenir le nom de la classe et de la méthode dans laquelle se trouve le code qui s'exécute ? (c'est pour mes logs)
    Yep, it ize possibeule.
    Méthode : System.Reflection.MethodBase.GetCurrentMethod()
    Type : System.Reflection.MethodBase.GetCurrentMethod().DeclaringType

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par Guulh Voir le message
    Yep, it ize possibeule.
    Méthode : System.Reflection.MethodBase.GetCurrentMethod()
    Type : System.Reflection.MethodBase.GetCurrentMethod().DeclaringType
    Oui, enfin faut faire gaffe avec ça quand même, c'est pas toujours très fiable : si le code est optimisé et que la méthode a été inlinée, ça renverra la méthode appelante...

  4. #4
    Membre très actif Avatar de jmnicolas
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2007
    Messages : 427
    Par défaut
    Citation Envoyé par Guulh Voir le message
    Yep, it ize possibeule.
    Méthode : System.Reflection.MethodBase.GetCurrentMethod()
    Type : System.Reflection.MethodBase.GetCurrentMethod().DeclaringType
    It ize goude niouze !
    Je vais tester ça de suite

    Citation Envoyé par tomlev Voir le message
    Oui, enfin faut faire gaffe avec ça quand même, c'est pas toujours très fiable : si le code est optimisé et que la méthode a été inlinée, ça renverra la méthode appelante...
    J'ai absolument rien compris
    Les rares fois où j'ai entendu parler d'inline c'était dans des échanges entre CPlusPlussiens (programmeurs C++ ).

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par jmnicolas Voir le message
    J'ai absolument rien compris
    Les rares fois où j'ai entendu parler d'inline c'était dans des échanges entre CPlusPlussiens (programmeurs C++ ).
    L'inlining, c'est une optimisation faite par le JIT pour remplacer l'appel à une méthode par le corps de cette méthode

  6. #6
    Membre très actif Avatar de jmnicolas
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2007
    Messages : 427
    Par défaut
    Donc si je comprend bien, le compilateur "recopie" le code complet de la méthode plutôt que d'appeler la méthode ?
    Je pensais pas que ça améliorait les performances.
    En tout cas merci pour l'explication.

  7. #7
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Oui, enfin faut faire gaffe avec ça quand même, c'est pas toujours très fiable : si le code est optimisé et que la méthode a été inlinée, ça renverra la méthode appelante...
    J'y avais pas pensé. Mais si j'en crois cette discussion, les méthodes appelant GetCurrentMethod ne sont pas inlinées.

    Sinon, pour en revenir au sujet initial: si tu cherches à logger, je t'invite à utiliser une librairie faite pour, comme log4net, le logging block de l'enterprise library, ou NLog. Si je ne me trompe, ils permettent de spécifier que chaque ligne de log inclut le nom de la méthode courante (mais ça doit aussi souffrir du même risque d'inlining).

  8. #8
    Membre très actif Avatar de jmnicolas
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2007
    Messages
    427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2007
    Messages : 427
    Par défaut
    Je sais c'est pas bien de réinventer la roue, mais moi j'aime bien savoir la construire la roue, et surtout avoir exactement ce dont j'ai besoin

    Et puis mon logger a une spécificité c'est qu'il m'envoie les logs par mail : ça me permet de détecter des problèmes sur mes softs en production sans péter un message d'erreur incompréhensible pour l'utilisateur.

  9. #9
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Citation Envoyé par jmnicolas Voir le message
    Je sais c'est pas bien de réinventer la roue, mais moi j'aime bien savoir la construire la roue, et surtout avoir exactement ce dont j'ai besoin

    Et puis mon logger a une spécificité c'est qu'il m'envoie les logs par mail : ça me permet de détecter des problèmes sur mes softs en production sans péter un message d'erreur incompréhensible pour l'utilisateur.
    log4net le fait

  10. #10
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Citation Envoyé par jmnicolas Voir le message
    Je sais c'est pas bien de réinventer la roue, mais moi j'aime bien savoir la construire la roue, et surtout avoir exactement ce dont j'ai besoin

    Et puis mon logger a une spécificité c'est qu'il m'envoie les logs par mail : ça me permet de détecter des problèmes sur mes softs en production sans péter un message d'erreur incompréhensible pour l'utilisateur.
    Les loggers dont je te parlais savent aussi faire ça. Et ça se fait déclarativement, dans un fichier de conf, sans toucher au code.

    Je n'ai pas idée du contexte dans lequel tu es (perso / pro, nombre d'utilisateurs, taille de la boite, niveau de l'équipe IT de la boîte s'il y a en a une, ...). Mais s'il y a la moindre chance que quelqu'un doive reprendre ce code, il vaut mieux s'en tenir, pour les briques élémentaires comme le logging, à de l'existant.

  11. #11
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par Guulh Voir le message
    J'y avais pas pensé. Mais si j'en crois cette discussion, les méthodes appelant GetCurrentMethod ne sont pas inlinées.
    Ah, c'est bon à savoir ! Donc en fait je m'inquiétais pour rien...

Discussions similaires

  1. Réponses: 8
    Dernier message: 15/03/2011, 12h24
  2. obtenir le nom de la classe dans une méthode static
    Par einboubou dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 13/11/2009, 16h46
  3. Obtenir le nom d'une table impliquée dans une contrainte
    Par graphicsxp dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 18/01/2006, 18h19
  4. obtenir le nom du dernier dossier dans un chemin
    Par Mitaka dans le forum Langage
    Réponses: 16
    Dernier message: 15/12/2005, 17h05
  5. Réponses: 4
    Dernier message: 27/06/2005, 19h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo