首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

怎样知道是哪个方法调用了小弟我

2013-03-25 
怎样知道是哪个方法调用了我?比如有方法A,当B方法调用A时,怎么才能在A里知道是B在调用?[解决办法]在B里可

怎样知道是哪个方法调用了我?
比如有方法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);
        }

热点排行