日期:2014-05-17  浏览次数:20965 次

怎样知道是哪个方法调用了我?
比如有方法A,当B方法调用A时,怎么才能在A里知道是B在调用?

------解决方案--------------------
在B里可以通过反射,在堆栈里查找
System.Reflection.MethodInfo mi = (System.Reflection.MethodInfo) (new StackTrace().GetFrame(1).GetMethod());
if(mi.Name=="A")
  //A调用的
------解决方案--------------------
引用:
在B里可以通过反射,在堆栈里查找
System.Reflection.MethodInfo mi = (System.Reflection.MethodInfo) (new StackTrace().GetFrame(1).GetMethod());
if(mi.Name=="A")
  //A调用的


如果这个方法被CLR内联,未必能得到正确的结果。
要不然Windows事件也不要什么sender参数了。

在.NET 4.5/VS2012以前,这个问题无解。在.NET 4.5上,有一组专门的Attribute可以把调用信息嵌入方法。
------解决方案--------------------
WhoCalledMe
------解决方案--------------------
static void A()
        {
            StackFrame sf = new StackTrace().GetFrame(1);
            Console.WriteLine(sf.GetMethod().Name);
        }