强制事件处理连线

本文关键字:事件处理 | 更新日期: 2023-09-27 17:57:57

有没有一种方法可以在编译时强制执行事件处理连线?

例如,假设我有一个公开标准EventHandler<T>的类,我能确保这个类的任何实例化实例都有OnMyEvent处理程序吗?(最好在编译时)

我能看到的执行此操作的唯一方法是将事件处理程序作为对象构造函数的一部分,或者在运行时使用反射。有其他选择吗?

此外,如果C#不允许此功能;出于好奇,还有其他语言吗?

强制事件处理连线

事件通常用于对象调用代码的可选消耗,例如,作为一个观察者(或多个观察者)。很少会强制处理事件。没有标准的语言/编译器构造来验证事件在编译时是否被订阅(我怀疑这将非常困难,因为您可以在代码中的任何时间、任何位置有效地订阅/取消订阅-可能是多次,即+HandlerA、+HandlerB、-HandlerA、-HanderB-最终没有订阅者)。

在您所呈现的场景中,如果是必需的,那么将其传递给构造函数听起来更合适,但在这种情况下,我可能会使用Func<...>Action<...>(而不是EventHandler<T>)。但这是主观的。

其他方法:

  • 使其成为抽象类,并强制使用者将一个或多个abstract成员子类化为override
  • 具有消费者必须提供的interface参数