读书人

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

发布时间: 2013-03-25 15:43:04 作者: rapoo

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

读书人网 >C#

热点推荐