Есть ли функция, которая возвращает текущее имя класса/метода? [дубликат]
этот вопрос уже есть ответ здесь:
- C# получает собственное имя класса 9 ответов
В C# есть функция, которая возвращает текущее имя класса/метода?
6 ответов:
текущее имя класса:
this.GetType().Name;
текущее имя метода:
using System.Reflection; // ... MethodBase.GetCurrentMethod().Name;
Так как вы используете это для целей регистрации, вы также можете быть заинтересованы в получении текущая трассировка стека.
Я немного изменил приведенный выше пример в этот фрагмент кода рабочего примера:
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 } } }
выход:
Program.FooBar enter Program.FooBar leave
да! Статический GetCurrentMethod класса MethodBase будет проверять вызывающий код, чтобы узнать, является ли он конструктором или обычным методом, и возвращает либо MethodInfo, либо ConstructorInfo.
это пространство имен является частью API отражения, поэтому вы можете в основном обнаружить все, что может видеть время выполнения, используя его.
здесь вы найдете исчерпывающее описание API:
http://msdn.microsoft.com/en-us/library/system.reflection.aspx
Если вы не хотите просматривать всю эту библиотеку вот пример, который я приготовил:
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; } } }
вывод этого кода будет:
Void Main<System.String[]> // Call to GetCurrentMethod() from Main. Int32 ConsecutiveIntegerSummation<Int32, Int32> //Call from summation method. 50 // Result of summation.
надеюсь, что я помог вам!
JAL
вы можете получить текущее имя класса, но я не могу думать о том, чтобы получить текущее имя метода. Хотя, названия методов для текущего можно получить.
string className = this.GetType().FullName; System.Reflection.MethodInfo[] methods = this.GetType().GetMethods(); foreach (var method in methods) Console.WriteLine(method.Name);