当事件分配给具有相同名称的事件处理程序时,它如何知道要调用哪个方法?
请考虑以下事项:
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");
}
然后,即使它们具有相同的名称,也将执行这两个方法。我已经知道您可以将相同的事件处理程序多次分配给一个事件,并且该方法的调用次数与分配的次数一样多,但是它如何在两个具有相同名称的不同事件处理程序之间产生区别?
方法名称是人类可读的友好名称,但它们具有 .Net 运行时使用的不同基础标识符,即使它们在不同的类中具有相同的名称或在同一类中具有相同的名称但不同的参数(即重载)。