没有事件参数的EventHandler类型

时间:2011-09-17 14:10:39

标签: c# events signals

当我们想要将数据传递给事件订阅者时,我们会使用EventArgs(或CustomEventArgs)。

.Net提供了一个构建类型的EventHandler,它使用了构建的EventArgs类的实例作为参数。

当我需要通知订阅者某些操作已结束时,例如搜索结束时,情况如何?我甚至不想使用不包含任何内容的EventArgs。

是否有用于发信号通知另一个类的内置类型,而不需要使用空的EventArgs?

4 个答案:

答案 0 :(得分:12)

我真的建议你在这里使用标准的EventHandler模​​式,然后通过EventArgs.Empty;但是,你可以使用Action作为你真正想要的事件类型 - 这很不寻常。

答案 1 :(得分:7)

你可以做几件事:

  1. 将您的正常事件与EventHandler和基本的EventArg类一起使用 - 确定它是空的但是这会受到伤害吗?
  2. 制作自己的代表,并将其与event MyDelegateWithoutParams MyEvent;
  3. 一起使用
  4. 使用带有IObservable的Observer-Pattern代替
  5. 让客户传递一个动作,然后调用此动作
  6. 我希望其中一个选项符合您的喜好。我在这种情况下使用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);