c# - 设计方法

标签 c#

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

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

我的问题是,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/

相关文章:

c# - 在 Ubuntu Linux 上另存为期间共享冲突

c# - 如何在 WCF 服务中使用 CefSharp?

c# - EF 迁移生成一个迁移文件,其中包含不再存在的数据

带 SSL/Https 的 C# RESTService

c# - 将子类别的 Microsoft Chart Control X 轴标签格式化为类似于 Excel 中生成的图表

c# - 如果使用 UNION ALL,MySqlDataReader 会为同一列返回不同的类型

c# - 使 Azure blob URL 仅可供登录用户访问

c# - 动态代理集合接口(interface)

c# - Asp.net grdiview : can i format the dataitems in an itemtemplate?

c# - Facebook 从 C# 发布到页面