没有事件参数的EventHandler类型

问题描述 投票:10回答:4

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

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

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

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

c# events signals
4个回答
7
投票

你可以做几件事:

  1. 使用事件处理程序和基本EventArgs类的正常事件 - 确保它是空的,但这会伤害吗?
  2. 制作自己的代表并与event MyDelegateWithoutParams MyEvent;一起使用
  3. 请改用Observer-Pattern和IObservable
  4. 让客户传递一个Action,并调用此操作

我希望其中一个选项符合您的喜好。我在这种情况下使用1和4(4个主要是如果只有一个“听众”)。

PS:我猜2不符合.net framework guidelines所以也许这不是最好的主意;)


12
投票

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


7
投票

如果你使用普通delegates肯定你可以做你想要的,但如果你使用events我认为最好是坚持标准,并始终有object发送者和EventArgs e。

如果你真的没有从你自己的代码中解雇那些事件,那么只需将EventArgs.Empty作为第二个参数传递。


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);
© www.soinside.com 2019 - 2024. All rights reserved.