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