当我们想要将数据传递给事件订阅者时,我们会使用EventArgs(或CustomEventArgs)。
.Net提供了一个构建类型的EventHandler,它使用了构建的EventArgs类的实例作为参数。
当我需要通知订阅者某些操作已结束时,例如搜索结束时,情况如何?我甚至不想使用不包含任何内容的EventArgs。
是否有用于发信号通知另一个类的内置类型,而不需要使用空的EventArgs?
答案 0 :(得分:12)
我真的建议你在这里使用标准的EventHandler模式,然后通过EventArgs.Empty
;但是,你可以使用Action
作为你真正想要的事件类型 - 这很不寻常。
答案 1 :(得分:7)
你可以做几件事:
event MyDelegateWithoutParams MyEvent;
我希望其中一个选项符合您的喜好。我在这种情况下使用1和4(如果只有一个“倾听者”,则主要使用4个。
PS:我猜2不符合.net framework guidelines所以也许这不是最好的主意;)
答案 2 :(得分:7)
如果您使用普通delegates
,您肯定可以按照自己的意愿行事,但如果您使用events
,我认为最好是坚持标准并始终拥有object
发件人和{{ 1}} e。
如果您真的没有从您自己的代码中触发这些事件,那么只需将EventArgs
作为第二个参数传递。
答案 3 :(得分:3)
使用操作(从https://stackoverflow.com/a/1689341/1288473复制的答案下方):
声明:
public event Action EventWithoutParams;
public event Action<int> EventWithIntParam;
通话:
if (EventWithoutParams != null) EventWithoutParams();
if (EventWithoutParams != null) EventWithIntParam(123);