如何从事件中获取正在调用的方法名称

本文关键字:调用 方法 事件 获取 | 更新日期: 2023-09-27 18:20:02

我的问题最好用一个小代码示例来描述;

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属性。如果符合您的要求,这将是一个更快、更优雅的解决方案。