事件处理程序设计
本文关键字:程序设计 事件处理 | 更新日期: 2023-09-27 18:31:17
面向设计的问题。
我见过很多制作如下自定义事件的示例:
namespace
{
public delegate void NewClientEvent(object sender, EventArgs e);
class ClientListner
{
public event NewClientEvent ClientConnected;
}
}
但是它必须像这样吗? 如果我既没有 eny 用于发件人也没有,那么是否有一些理由包含它,或者只是这样做是完全合法的
namespace
{
public delegate void NewClientEvent(Socket newclient);
class ClientListner
{
public event NewClientEvent ClientConnected;
}
}
这样,只有相关数据才能发送? vs 智能无论如何都有助于插入,所以它不会变得更难。
将 object sender, EventArgs e
用于事件,MyRelevantClass data
用于回调。
对于这个上下文,我的定义是这样的:一个事件可以来自多个地方,许多实体可以侦听它 - 每个实体都需要(数据的子集)。回调是特定于系统、特定于上下文的,并且比松散耦合的消息传递更接近强耦合继承/多态性。
为什么选择发件人和事件?
如果您突然需要知道系统的哪个部分导致新客户端连接,该怎么办?如果要将元数据添加到该特定连接,该怎么办?(有没有重试?我们知道这个IP?它是否在本地网络上?我们是否要覆盖TTL?等等)。使用传统的object sender, EventArgs e
签名可以使用此功能干净地扩展代码,而无需重写代码,除非需要其他数据。
对于事件,为可能需要添加数据的情况做好准备非常重要,并且应尽量遵守开闭原则。传统签名使此操作更容易,并被视为最佳实践。