没有事件参数的EventHandler类型

Max*_*lov 10 c# events signals

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

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

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

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

Mar*_*ell 12

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


Car*_*ten 7

你可以做几件事:

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

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

PS:我猜2不符合.net框架指南所以也许这不是最好的主意;)


Dav*_*ras 7

如果你使用简单delegates肯定你可以做你想要的,但如果你使用events我认为最好是坚持标准,总是有object发送者和EventArgs电子邮件.

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


Ete*_*l21 7

使用操作(下面从/sf/answers/118253901/复制的答案):

声明:

public event Action EventWithoutParams; 
public event Action<int> EventWithIntParam;
Run Code Online (Sandbox Code Playgroud)

调用:

EventWithoutParams?.Invoke(); 
EventWithIntParam?.Invoke(123);
Run Code Online (Sandbox Code Playgroud)