En C #, existe-t-il une fonction qui retourne le nom actuel de la classe / méthode?
Réponses
Trop de publicités?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 .
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
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