我的问题最好用一个小代码示例来描述;
public class ClassA {
public delegate void MyDelegate(EventArgs e);
public event MyDelegate MyEvent;
public void OnEvent(EventArgs e) {
if (MyEvent != null)
MyEvent(e);
// print "WhatIsMyName" here
}
}
public class ClassB {
public ClassB() {
ClassA a = new ClassA();
a.MyEvent += WhatIsMyName;
}
public static void WhatIsMyName(EventArgs e) {
}
}
我想我需要使用反思,但我不确定如何进行(甚至不确定是否可能)。我还希望能够获得该方法的类名。
实际上,.NET 4.5中有一个新功能,叫做"调用者信息"。
你可以得到一些关于来电者的信息,比如:
public void Foo([CallerMemberName]string sourceMemberName = "",
[CallerFilePath]string sourceFilePath = "",
[CallerLineNumber]int sourceLineNo = 0)
{
Debug.WriteLine("Member Name : " + sourceMemberName);
Debug.WriteLine("File Name : " + sourceFilePath);
Debug.WriteLine("Line No. : " + sourceLineNo);
}
更多信息:呼叫者信息-codeguru.com
您可以使用StackTrace类查看应用程序的整个堆栈跟踪。这会很慢,但应该会奏效。
查看GetFrame和GetFrames方法以获取一些示例。
编辑:如果您在.Net 4.5上,您也可以使用CallerMemberName属性。如果符合您的要求,这将是一个更快、更优雅的解决方案。