有立即来到我的脑海里至少有两个很好的理由:
一致性与方法声明
你是正确的,参数名称不是签名的组成部分,因此它在技术上是不需要匹配委托(因此,在将委托与方法匹配时,参数名称将被忽略)。但是,一致性是语言的一个重要特征。它使学习变得更容易,减少认知工作量,从而提高生产力。代表是一种方法的“占位符”。为了保持一致,将其定义尽可能类似于方法定义是有意义的。一种方法会声明如下:
void PropertyChangedHandler(object sender, PropertyChangedEventArgs e) {
//...
}
授人以这种方法可以像定义:
delegate void PropertyChangedEventHandler(object sender, PropertyChangedEventArgs e);
正如你所看到的,唯一的区别是delegate
关键字(当然缺乏一个方法体,这在这里是不相关的,因为这不是签名的一部分)。这很容易学习和记忆。
发展论坛艾滋病
在Visual Studio中,您可以键入事件名称,然后+=
,按Tab键两次,并会为您生成的事件处理方法。代表参数的名称用于生成的方法。如果代表仅带有参数类型而不带名称,则参数必须命名为param1
,param2
等,这不会很有意义。这同样适用于其他开发辅助工具,例如,当您编写代码调用委托时,智能感知会向您显示委托参数的名称。这比他们的类型更有用。
假设您有一个代表对象和EventArgs的两个对象的委托。你或者其他执行委托的人会如何分辨哪个是哪个? – BoltClock
是否想从接口中声明的方法中删除参数名称,以及抽象方法吗?基本上,参数列表在任何地方都有一致的语法。 –