我需要在以下设计方面的帮助。基本上,我有一个主表单,它初始化一个名为Settings的类。当用户单击名为CommunicationsSetupForm的窗体时,Main将在其ctor中传递设置类。在此CommunicationsSetupForm中,用户可以更改诸如通信类型(RS232、RS485、TCP/IP等)、波特率、COM端口名称等设置。
一旦完成,焦点就会回到主表单上。从这里,用户可以发送一个包到相应的硬件,例如一个运行的包。该数据包是通过Init数据包类(它还接受其CTOR中的设置类)而非InitalizePacket调用PacketGenerate (后者也在CTOR中传递Settings类)而非最终通过来自PacketGenerate的事件调用CommunicationMediator。CommunicationMediator实际上是在主窗体中初始化的,并且还通过它的CTOR接受Settings类。下面是一张正在发生的事情的图片,我希望它能使情况更清楚一点:

我的问题是,CommunicationMediator了解设置类是否已经更改的最佳方法是什么。例如,用户现在已经将波特率从9600更改为300。从我的研究中,我读到了关于“深度复制”的文章,以及实现它的一种方法:如何在.NET (特别是C#)中对对象进行深度复制?。使用这种技术,我可以创建一个名为OldSettings的类的非引用副本,并在每次需要通过硬件发送一些东西时将其与当前的Settings类进行比较。如果OldSettings != Settings,则首先更改硬件上的设置。
如果我以这种方式实现,如何将旧的设置类与当前的设置类进行比较?这是CommunicationMediator检查设置类是否已更改的最佳方法吗?
发布于 2012-06-11 16:25:13
您的Settings类可以实现INotifyPropertyChanged。这是框架中的一个标准接口,如果类中的属性发生了更改,它允许您订阅通知,并且比每次深度复制和比较要简单得多。
https://stackoverflow.com/questions/10983971
复制相似问题