【发布时间】:2012-05-16 08:13:35
【问题描述】:
我有一个名为 IDataIO 的接口:
public interface IDataIO
{
event DataReceivedEvent DataReceived;
//.....more events,methods and properties
}
我也有多个类实现了这个接口,分别是UdpIO、TcpIO、SerialIO。
现在,我有一个IO 类,允许我在不同的输入/输出硬件之间切换。此类的每个实例都有一个CurrentIODevice 属性,它可以是SerialIO、UdpIO 或TcpIO 之一。分配此属性后,我将 1 个或多个处理程序附加到 DataReceivedEvent 以便在收到传入数据时通知我的 GUI,以及需要通知的其他类。
public class IO
{
IDataIO CurrentIODevice;
public IO()
{
SerialIO serial = new SerialIO();
TcpIO tcp = new TcpIO();
UdpIO udp = new UdpIO();
CurrentIODevice = serial;
}
}
我还有一个 IOManager 类,它包含多个 IO 对象。
public class IOManager
{
List<IO> Ports = new List<IO>();
public IOManager()
{
Ports.Add(new IO());
Ports.Add(new IO());
}
Ports[0].CurrentIODevice = serial;
Ports[0].CurrentIODevice.DataReceivedHandler += MyGuiUpdate;
Ports[0].CurrentIODevice.DataReceivedHandler += MyDataProcessing;
}
我关心(这不是问题 atm)是我将如何在运行时在不同的 IDataIO 接口之间进行更改。
在运行时执行以下语句的效果是什么:
//i know this is illegal but just to demonstrate
IOManager.Ports[0].CurrentIODevice = tcp;
事件处理程序是否仍然正常运行(并且正确)?
我是否需要在分配 CurrentIODevice 之前取消分配事件,然后再重新分配处理程序?如果是这种情况,我可以看到这种方法变得非常混乱,所以如果有人有更好的方法来解决这个问题,我会全力以赴:)
【问题讨论】: