执行事件处理连线

时间:2011-05-31 06:42:38

标签: c# events language-agnostic programming-languages delegates

有没有办法执行事件处理连线的编译时执行?

例如,假设我有一个暴露标准EventHandler<T>的类,我可以确保此类的任何实例化实例都有OnMyEvent处理程序,处理? (最好在编译时)

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

此外,如果C#不允许此功能;出于好奇,做其他任何语言?

1 个答案:

答案 0 :(得分:3)

事件 。处理该事件非常罕见强制执行。没有标准的语言/编译器构造用于验证在编译时订阅事件(我怀疑它会非常困难,因为您可以随时在代码中的任何位置有效地订阅/取消订阅 - 可能多次, ie + HandlerA,+ HandlerB,-HandlerA,-HandlerB - 以没有订户结束)。

在您呈现的场景中,必需,然后将其传递给构造函数听起来更合适,但我可能会在此使用Func<...>Action<...>案例(不是EventHandler<T>)。但这是主观的。

其他方法:

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