0

同じ名前のイベント ハンドラーに割り当てられている場合、イベントはどのメソッドを呼び出すかをどのように認識しますか?

次の点を考慮してください。

    public static void ImplementExitOnEscape(Window window)
    {
        window.KeyDown += Window_KeyDown;
    }

    private static void Window_KeyDown(object sender, KeyEventArgs e)
    {
        var window = sender as Window;
        // Close window when pressing the escape key.
        if (e.Key == Key.Escape) if (window != null) window.Close();
    }

ImplementExitOnEscape(this)ウィンドウを呼び出すだけでなく、次のことも行います。

KeyDown += Window_KeyDown;

        void Window_KeyDown(object sender, KeyEventArgs e)
        {
            MessageBox.Show("Key Down");
        }

同じ名前であっても、両方のメソッドが実行されます。同じイベント ハンドラーを 1 つのイベントに複数回割り当てることができ、メソッドが割り当てられた回数だけ呼び出されることは既に知っていますが、同じ名前の 2 つの異なるイベント ハンドラーの違いはどのように生じるのでしょうか?

4

1 に答える 1

4

メソッド名は人間が読めるわかりやすい名前ですが、異なるクラスで同じ名前を持っている場合や、同じクラスで同じ名前で引数が異なる (つまり、オーバーロードされている) 場合でも、.Net ランタイムで使用される別の基になる識別子があります。

于 2012-09-22T11:47:19.930 に答える