Нет, нет - по крайней мере, не используя профилирование/отладку API некоторого описания. Можно обойти стек для нахождения вызова метод с протестом, что это действительно медленно и может быть неточно из-за оптимизаций JIT. Это не скажет Вам, чем вызовом состоит в том объект , хотя (если действительно существует один).
Если Вы хотите получить тип, можно попробовать это:
новый StackFrame (1).GetMethod ().DeclaringType
Как Jon, на которого указывают там, мог бы быть проблемами при столкновении с монетой в пять центов optimisizations.
Что касается получения данных из объекта, я не думаю, что это возможно.
Только для разработки проблему оптимизации возьмите следующий код:
class stackTest
{
public void Test()
{
StackFrame sFrame = new StackFrame(1);
if (sFrame == null)
{
Console.WriteLine("sFrame is null");
return;
}
var method = sFrame.GetMethod();
if (method == null)
{
Console.WriteLine("method is null");
return;
}
Type declaringType = method.DeclaringType;
Console.WriteLine(declaringType.Name);
}
public void Test2()
{
Console.WriteLine(new StackFrame(1).GetMethod().DeclaringType.Name);
}
}
class Program
{
static void Main(string[] args)
{
stackTest s = new stackTest();
s.Test();
Console.WriteLine("Doing Test2");
s.Test2();
Console.ReadLine();
}
}
Мы должны получить Программу к консоли дважды, и когда Вы работаете в отладчике, Вы делаете. Когда Вы работаете без отладчика в режиме выпуска, Вы получаете вывод от первой Тестовой функции. Который является прочертовским, потому что это к комплексу, который будет встроен; однако, второй метод вызывает исключение нулевой ссылки.
Другая опасность с этим кодом состоит в том, который в MS улучшает JIT-компилятор, что, возможно, работало в 2,0, мог отказать и гореть в будущих версиях.
Посмотрите этот вопрос:
можно ли использовать отражение для нахождения названия в настоящее время метода выполнения?
Это не дубликат, но ответ на тот вопрос ответит на Ваш также.