Как я могу получить вызывающие методы в С#
Возможный дубликат:
Как найти метод, который вызвал текущий метод?
Мне нужен способ узнать имя вызывающих методов в С#.
Например:
private void doSomething()
{
// I need to know who is calling me? (method1 or method2).
// do something pursuant to who is calling you?
}
private void method1()
{
doSomething();
}
private void method2()
{
doSomething();
}
Ответы
Ответ 1
из http://www.csharp-examples.net/reflection-calling-method-name/
using System.Diagnostics;
// get call stack
StackTrace stackTrace = new StackTrace();
// get calling method name
Console.WriteLine(stackTrace.GetFrame(1).GetMethod().Name);
Ответ 2
Ты почти наверняка не хочешь этого делать. Вызывающий не должен знать, кто его вызывает. Вместо этого разница между двумя вызывающими абонентами должна быть абстрагирована в параметр и передаваться в вызываемый метод:
private void doSomething(bool doItThisWay)
{
if (doItThisWay)
{
// Do it one way
}
else
{
// Do it the other way
}
}
private void method1()
{
doSomething(true);
}
private void method2()
{
doSomething(false);
}
Таким образом, если вы добавите метод3, он может либо сделать что-то так или иначе, и doSomething не заботится.