В С# есть функция, которая возвращает текущее имя класса/метода?
Есть функция, которая возвращает текущее имя класса/метода?
Ответ 1
Текущее имя класса:
this.GetType().Name;
Имя текущего метода:
using System.Reflection;
// ...
MethodBase.GetCurrentMethod().Name;
Поскольку вы используете это для ведения журнала, вы также можете быть заинтересованы в получении текущей трассировки стека.
Ответ 2
Ответ 3
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType
Ответ 4
Я немного изменил приведенный выше пример на этот кусок кода рабочего примера:
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
Ответ 5
Да! Статический метод 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
Ответ 6
Вы можете получить текущее имя класса, но я не могу думать о том, чтобы получить имя текущего метода. Хотя имена методов для тока могут быть получены.
string className = this.GetType().FullName;
System.Reflection.MethodInfo[] methods = this.GetType().GetMethods();
foreach (var method in methods)
Console.WriteLine(method.Name);