基础知识,就怕你不会……千万别不会!
有 A 和 B 两个类,B类中有一个方法叫M1()。
假如我在A类的一个方法里调用B类中的M1方法,怎么在M1方法里写代码才能获取到当前调用它的类名或方法名?
[解决办法]
获取当前调用的堆栈,里面有足够多的信息来满足你。
[解决办法]
请看下StackTrace对象。获取当前方法调用的堆栈信息,里面的内容足够满足你了。
[解决办法]
StackTrace stackTrace = new StackTrace();
StackFrame stackFrame0 = stackTrace.GetFrame(0);
Console.WriteLine(stackFrame0.GetMethod().Name);//当前方法名
StackFrame stackFrame1 = stackTrace.GetFrame(1);
Console.WriteLine(stackFrame1.GetMethod().Name);//调用这个方法的方法名
[解决办法]
class A{ public C c = new C(); public void CallM1Method() { c.M1(); }}class B{ public C c = new C(); public void CallM1Method() { c.M1(); }}class C{ public void M1() { // 获取到底是 A 调用的还是 B 调用的 Type aType = typeof(A); Type bType = typeof(B); StackTrace trace = new StackTrace(); StackFrame[] frames = trace.GetFrames(); foreach (StackFrame frame in frames) { Type t = frame.GetMethod().DeclaringType; if (t == aType) { Console.WriteLine("A invoke"); break; } if (t == bType) { Console.WriteLine("B invoke"); break; } } }}