91 votes

Existe-t-il une fonction qui renvoie le nom actuel de la classe / méthode?

En C #, existe-t-il une fonction qui retourne le nom actuel de la classe / méthode?

175voto

Cameron Points 32208

Nom actuel de la classe:

 this.GetType().Name;
 

Nom de la méthode actuelle:

 using System.Reflection;

// ...

MethodBase.GetCurrentMethod().Name;
 

Comme vous l'utilisez à des fins de journalisation, vous pouvez également être intéressé par la trace actuelle de la pile .

12voto

Gabe Points 49718

10voto

sajoshi Points 1993
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType

7voto

skyhawk Points 51

J'ai changé un peu l'exemple ci-dessus en cet exemple de code de travail:

 public class MethodLogger : IDisposable
{
    public MethodLogger(MethodBase methodBase)
    {
        m_methodName = methodBase.DeclaringType.Name + "." + methodBase.Name;
        Console.WriteLine("{0} enter", m_methodName);
    }

    public void Dispose()
    {
        Console.WriteLine("{0} leave", m_methodName);
    }
    private string m_methodName;
}

class Program
{
    void FooBar()
    {
        using (new MethodLogger(MethodBase.GetCurrentMethod()))
        {
            // Write your stuff here
        }
    }
}
 

Sortie:

 Program.FooBar enter
Program.FooBar leave
 

5voto

Jose Alava Points 31

Oui! Le MethodBase de la classe statique GetCurrentMethod va inspecter le code d'appel pour voir si c'est un constructeur ou une méthode normale, et retourne un MethodInfo ou un ConstructorInfo.

Cet espace de noms est une partie de la réflexion de l'API, de sorte que vous pouvez découvrir tout ce que le temps d'exécution peut voir en l'utilisant.

Ici vous trouverez une description exhaustive de l'API:

http://msdn.microsoft.com/en-us/library/system.reflection.aspx

Si vous n'avez pas envie de regarder à travers l'ensemble de la bibliothèque voici un exemple que j'ai concocté:

namespace Canvas
{
  class Program
  {
    static void Main(string[] args)
    {
        Console.WriteLine(System.Reflection.MethodBase.GetCurrentMethod());
        DiscreteMathOperations viola = new DiscreteMathOperations();
        int resultOfSummation = 0;
        resultOfSummation = viola.ConsecutiveIntegerSummation(1, 100);
        Console.WriteLine(resultOfSummation);
    }
}

public class DiscreteMathOperations
{
    public int ConsecutiveIntegerSummation(int startingNumber, int endingNumber)
    {
        Console.WriteLine(System.Reflection.MethodBase.GetCurrentMethod());
        int result = 0;
        result = (startingNumber * (endingNumber + 1)) / 2;
        return result;
    }
}    
}

La sortie de ce code sera:

Void Main<System.String[]> // Call to GetCurrentMethod() from Main.
Int32 ConsecutiveIntegerSummation<Int32, Int32> //Call from summation method.
50 // Result of summation.

Espère que je vous ai aidé!

JAL

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X