0

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

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) {

    }
}

我猜我需要使用反射,但我不确定如何去做(或者即使它是可能的)。我还希望能够获得方法的类名。

4

2 回答 2

1

实际上 .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

于 2013-06-26T13:36:31.137 回答
0

您可以使用StackTrace类查看应用程序的整个堆栈跟踪。这会很慢,但应该可以。

查看GetFrameGetFrames方法以获取一些示例。

编辑:如果您使用的是 .Net 4.5,您还可以使用CallerMemberName属性。如果它符合您的要求,这将是一个更快、更优雅的解决方案。

于 2013-06-26T13:34:58.450 回答