.net中事件代理的标准模式有什么意义?即EventHandler预定义委托?为什么不选择最合适的签名?
编辑:此外,是否有必要在所有情况下盲目地遵循微软的例子?
答案 0 :(得分:4)
在C#1.0中,惯例没有多大意义。在C#2.0中,有一定数量的委托差异,它更有意义。
如果您的事件处理方法并不真正关心参数,例如
public void SaveDocument(object sender, EventArgs args)
{
// Save the document here
}
您现在可以使用该方法订阅遵循约定的任何事件,即使实际的发件人或args更严格地键入。这意味着您可以对键盘事件,按钮单击等使用相同的处理程序。
答案 1 :(得分:3)
主要用于一致性和版本控制 - 使用sender
参数,因为System.Object和args
参数始终是System.EventArgs或其衍生类,您可以更改sender参数传递给它以及之后更改EventArgs类型而不破坏任何现有代码。
整个.NET事件习惯用于支持基于组件的开发,其中调用代码不受具有事件的组件开发人员的控制。
答案 2 :(得分:3)
这是一个很好的问题。异端,但好。我最近阅读了一篇博文(我找不到链接 - 有没有人有这个链接)揭穿了你需要始终覆盖System.EventArgs以提供良好事件处理的神话。
我完全遵守惯例并遵守规则,但我认为这可以被认为是可以弯曲的 - 如果不能避免的话。需要不断地为每个事件覆盖System.EventArgs,这增加了例程的耦合 - 现在还有另外一个需要跟踪的事情。
拥有一个提供成员的“e”并不比一个有名的参数集更有帮助或更直观。我不认为可以通过派遣推荐的System.EventArg模式获得参数,但是我会让你参与进来。
RP
答案 3 :(得分:2)
它将呼叫者与被呼叫者分离。