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クラスを使用して、アプリケーションのスタック トレース全体を確認できます。これは非常に遅くなりますが、動作するはずです。

いくつかの例については、 GetFrameおよびGetFramesメソッドを確認してください。

編集: .Net 4.5 を使用している場合は、CallerMemberName属性も使用できます。これは、要件に適合する場合、より高速でエレガントなソリューションになります。

于 2013-06-26T13:34:58.450 に答える