运行时自动生成自定义事件

本文关键字:事件 自定义 自动生成 运行时 | 更新日期: 2023-09-27 18:28:12

我有一个处理send&通过我的应用程序和网络之间的套接字接收。该类使用其他类,包括一个低级别的socket连接类和一个创建要发送的消息并处理接收到的数据的PDU处理程序类。

现在,我使用一个事件向我的类发出信号,表明低级别连接类有数据,我需要将该数据发送到PDU处理程序,以转换为应用程序可以使用的信息,然后将数据交给应用程序。

为了将来的使用,我正在努力使类尽可能通用,这样在未来的服务器/客户端项目中,我只需要更改PDU处理程序,就可以考虑可用的新操作以及如何处理数据。

所有这些都在顺利进行,现在我面临着将数据交回应用程序的问题。为此,我的逻辑方法是通过一个事件让应用程序知道数据已经准备好收集了。为此,我可以:

a) 有一个事件,让应用程序通过操作代码来确定它是什么样的消息(可行)b) 每个操作代码有一个事件,并让应用程序订阅所有这些事件,从而在一开始就知道它得到了什么

考虑到使事物通用的想法,以及b中所述的方法,是否有一种方法可以在运行时基于给定的委托签名来普通地创建事件?

e。g。假设您在一个名为MyOperation1和MyOperation2的枚举中有操作码,并且您定义了一个委托,如:

public delegate void PDUEventHandler(ParamType Param, [...]);

我想定义称为的事件

public event PDUEventHandler MyOperation1;
public event PDUEventHandler MyOperation2;

但如果我添加一个新的操作代码,我将需要一个事件。

这些事件可以普通创建吗?还是我需要手工创建?如果我需要手工完成,那么我想一个单独的事件会更好,并在应用程序端处理事情。

运行时自动生成自定义事件

也许您需要的是回调——本质上是向事件处理程序传递一个委托,以便在处理程序完成时执行。这里有一个stackoverflow线程给你一个想法

在事件处理程序方面&可重用性,也许您可以扩展EventArgs并将该委托作为属性。

编辑:

我在想一个单独的PDUEventHandler,它有公共代码和一个运行自定义代码的"洞"。该自定义代码作为委托(即方法)甚至类实例传递给处理程序。但让我们稍微改变一下。。。

听起来你需要一个工厂。事实上,你实际上是在描述一家工厂。

从概念上放弃将特殊操作码传递给EventHandler本身或具有多签名PDUEventHandler的想法。

创建一个PDUHandlerFactory类。工厂返回一个自定义实例作为通用PDUHandler类引用。然后,您的调用者有一个指向工厂自定义实例的PDUHandler引用,而不是PDUEventHander。