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

时间:2012-03-16 13:24:35

标签: c# events

我有一个Handles send& amp;通过我的应用程序和网络之间的套接字接收。此类使用其他类,包括低级sockket连接类和PDU处理程序类,它们创建要发送和处理接收数据的消息。

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

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

所有这一切都在进行中,现在我面临着将数据交还给应用程序的问题。为此,我的逻辑方法是让应用程序知道数据已准备好收集的事件。为此,我可以:

a)有一个事件,让应用程序通过操作代码(可行)理清它是什么类型的消息 b)每个操作代码都有一个事件,让应用程序订阅所有这些代码,从而在开始时知道它的内容

考虑到使事物变得通用的想法,以及b中所述的方法,有没有办法在运行时基于给定的委托签名动态创建事件?

即G。 想象你在一个名为MyOperation1和MyOperation2的枚举中有操作码,你已经定义了一个委托:

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

我希望定义名为的事件:

public event PDUEventHandler MyOperation1;
public event PDUEventHandler MyOperation2;

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

这个事件可以动态地创建,还是我需要手动完成? 如果我需要手动完成,那么我猜单个事件会更好并处理app方面的事情。

1 个答案:

答案 0 :(得分:1)

也许你需要的是一个回调 - 基本上你传递给事件处理程序一个委托,让它在处理程序完成时执行。 Here's a stackoverflow thread to give you an idea

关于事件处理程序&可重用性,也许你可以扩展EventArgs并将该委托作为属性。

编辑:

我在考虑一个PDUEventHandler个公共代码和一个“洞”,其中运行自定义代码。该自定义代码作为委托(即方法)或甚至类实例传递给处理程序。但是让我们稍微改变一下......

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

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

创建一个PDUHandlerFactory课程。工厂将自定义实例作为常规PDUHandler类引用返回。然后,调用者没有PDUEventHander,而是具有指向工厂自定义实例的PDUHandler引用。