我对.NET事件模型非常了解。我想我可能会误解该系统的细微差别。
当我开始将事件放入班级时,我将使用标准方式,如下所示:
public event EventHandler<MyEventArgs> MyEvent;
这意味着任何订阅该事件的人都需要类似以下方法:
void HandleThatEvent(object sender, MyEventArgs args){...}
很好,但是我发现我很少关心发送者,因此它使很多方法签名变得肿。
所以我改用声明自己的委托类型
public delegate void MyEventHandler(SomeClass argument);
它减少了混乱,但是在编写处理程序时却给我带来了一个小问题:
eventImplmentor.MyEvent += HandleThatEvent;
.
.
.
void HandleThatEvent(/*oh, um, what arguments does it take? Intellisense isn't telling me*/)
因此,我将不得不返回到委托的声明,然后再查看并回写它们,或者编译它并等待被告知。
因此,现在,我只是用Action
,Action<T>
或任何模板适合。
public event Action<SomeClass> MyEvent;
这样我就可以将鼠标悬停在事件上,并被告知期望的参数。
毕竟,我的问题是:是否有在C#中声明事件的最佳实践?我应该回到原来的EventHandler<T>
方式还是可以Action<T>
接受?