3

次のデザインについてサポートが必要です。基本的に、 Settingsというクラスを初期化するMainフォームがあります。ユーザーがCommunicationsSetupFormというフォームをクリックすると、MainはそのctorでSettingsクラスを渡します。このCommunicationsSetupFormから、ユーザーは通信のタイプ(RS232、RS485、TCP / IPなど)、ボーレート、COMポート名などの設定を変更できます。

これが完了すると、フォーカスはメインフォームに戻ります。ここから、ユーザーはRUNパケットなどのパケットをそれぞれのハードウェアに送信できます。パケットは、CTORのSettingsクラスも取り込むInit Packetクラスを介して初期化され、InitalizePacketがPacketGenerateを呼び出します。PacketGenerateはCTORのSettingsクラスも渡し、最後にCommunicationMediatorはPacketGenerateからのイベントを介して呼び出されます。CommunicationMediatorは実際にはメインフォームで初期化され、CTORを介してSettingsクラスも取り込みます。以下は何が起こっているのかを示したものであり、状況がもう少し明確になることを願っています。 ここに画像の説明を入力してください

私の質問は、CommunicationMediatorがSettingsクラスが変更されたかどうかを知るための最良の方法は何ですか。たとえば、ユーザーはボーレートを9600から300に変更しました。私の調査から、「ディープコピー」とその実装方法について読みました。.NETでオブジェクトのディープコピーを実行するにはどうすればよいですか(C#具体的には)?。この手法を使用すると、OldSettingsというクラスの参照されていないコピーを作成し、ハードウェアを介して何かを送信する必要があるたびに、現在のSettingsクラスと比較できます。OldSettings!= Settingsの場合、最初にハードウェアの設定を変更します。

このように実装した場合、古い設定クラスを現在の設定クラスと比較するにはどうすればよいですか?これは、CommunicationMediatorがSettingsクラスが変更されたかどうかを確認するための最良の方法ですか?

4

1 に答える 1

4

SettingsクラスはINotifyPropertyChangedを実装するだけです。これはフレームワークの標準インターフェースであり、クラス内のプロパティが変更された場合に通知をサブスクライブできるようにし、毎回ディープコピーして比較するよりもはるかに簡単です。

于 2012-06-11T16:25:13.543 に答える