3

我需要以下设计方面的帮助。基本上我有一个 Main 表单,它初始化一个名为Settings的类。当用户单击一个名为 CommunicationsSetupForm 的表单时,Main 会在其 ctor 中传递Settings类。通过该 CommunicationsSetupForm,用户可以更改通信类型(RS232、RS485、TCP/IP 等)、波特率、COM 端口名称等设置。

完成此操作后,焦点将返回到主窗体。从这里,用户可以将数据包发送到相应的硬件,例如 RUN 数据包。数据包是通过 Init Packet 类初始化的,该类也接受其 CTOR 中的Settings类,然后 InitalizePacket 调用 PacketGenerate,它也在其 CTOR 中传递Settings类,最后通过来自 PacketGenerate 的事件调用 CommunicationMediator。CommunicationMediator 实际上是在 Main Form 中初始化的,并且还通过其 CTOR接收Settings类。下面是正在发生的事情的图片,我希望它能让情况更清楚一点: 在此处输入图像描述

我的问题是,CommunicationMediator 知道Settings类是否已更改的最佳方法是什么。例如,用户现在已将波特率从 9600 更改为 300。根据我的研究,我已经阅读了有关“深度复制”以及实现它的方法:How do you do a deep copy of an object in .NET (C#具体来说)?. 使用这种技术,我可以创建一个名为OldSettings的类的非引用副本,并在每次需要通过硬件发送某些内容时将其与当前的Settings类进行比较。如果OldSettings != Settings,我首先更改硬件上的设置。

如果我以这种方式实现旧的Settings类和当前的Settings类,如何进行比较?这是 CommunicationMediator 检查Settings类是否已更改的最佳方法吗?

4

1 回答 1

4

您的Settings班级可以只实现INotifyPropertyChanged。这是框架中的标准接口,允许您在类中的属性发生更改时订阅通知,并且比每次深度复制和比较简单得多。

于 2012-06-11T16:25:13.543 回答