我需要以下设计方面的帮助。基本上我有一个Main表单初始化一个名为设置的类。当用户单击名为CommunicationsSetupForm的表单时,Main会在其ctor中传递设置类。通过此CommunicationsSetupForm,用户可以更改通信类型(RS232,RS485,TCP / IP等),波特率,COM端口名称等设置。
完成此操作后,焦点将返回到主窗体。从这里,用户可以将分组发送到相应的硬件,例如RUN分组。该数据包通过Init Packet类初始化,该类在其CTOR中也接受设置类,而不是InitalizePacket调用PacketGenerate,它也通过其CTOR中的设置类,最后,通过PacketGenerate的事件调用CommunicationMediator。 CommunicationMediator实际上是在主表单中初始化的,并且还通过其CTOR接收设置类。下面是一张正在发生的事情的图片,我希望它能让情况更加清晰:
我的问题是,CommunicationMediator知道设置类是否已更改的最佳方法是什么。例如,用户现在已将波特率从9600更改为300.从我的研究中,我已阅读有关“深层复制”的信息以及实现它的方法:How do you do a deep copy of an object in .NET (C# specifically)?。使用这种技术,我可以创建一个名为 OldSettings 的类的非引用副本,并在每次需要通过硬件发送内容时将其与当前的设置类进行比较。如果 OldSettings!=设置,我首先更改硬件上的设置。
如果我以这种方式实现,如何将旧的设置类与当前的设置类进行比较?这是CommunicationMediator检查设置类是否已更改的最佳方式?
答案 0 :(得分:4)
您的Settings
课程可以实施INotifyPropertyChanged。这是框架中的标准接口,允许您在类中的属性发生更改时订阅通知,并且比每次深度复制和比较简单得多。