Nie z klasy, tylko z której metody. 0 zwróci Ci bieżącą metodę, 1 metodę wywołującą metodę 0, 2 metodę wywołującą metodę 1, itd.
Rozumiem, że Ty możesz z klasy A wywołać klasę B, z klasy B klasę C, a dopiero z C klasę X i w X chciałbyś mieć informację o tym, że całe to wywoływanie zaczęło się w klasie A?
Jeśli tak, to może w ten sposób?
using System;
using System.Diagnostics;
namespace ConsoleApplication8
{
class Program
{
static void Main(string[] args)
{
new A().CallXFromA();
new B().CallXFromB();
new A().CallXFromBFromC();
Console.ReadLine();
}
}
class A
{
public void CallXFromA()
{
new X().DoSomething();
}
public void CallXFromBFromC()
{
new B().CallXFromC();
}
}
class B
{
public void CallXFromB()
{
new X().DoSomething();
}
public void CallXFromC()
{
new C().CallXFromC();
}
}
class C
{
public void CallXFromC()
{
new X().DoSomething();
}
}
class X
{
public void DoSomething()
{
StackFrame[] frames = new StackTrace().GetFrames();
int n = 0;
for (int i = 0; i < frames.Length; i++)
{
if (frames[i].GetMethod().Name == "Main" && frames[i].GetMethod().DeclaringType.Name == "Program")
{
n = i - 1;
break;
}
}
Console.WriteLine(frames[n].GetMethod().DeclaringType.Name);
}
}
}