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");
        }

那么这两个方法都将被执行,即使它们具有相同的名称。我已经知道您可以将同一个事件处理程序多次分配给一个事件,并且该方法将被调用的次数与分配的次数一样多,但是它如何在具有相同名称的两个不同事件处理程序之间产生区别?

4

1 回答 1

4

方法名称是人类可读且友好的名称,但它们具有.Net 运行时使用的不同底层标识符,即使它们在不同的类中具有相同的名称或在同一类中具有相同的名称但参数不同(即重载)。

于 2012-09-22T11:47:19.930 回答