怎样知道是哪个方法调用了我?
比如有方法A,当B方法调用A时,怎么才能在A里知道是B在调用?
------解决方案--------------------在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);
}