0

編集1

ケントは私の恐れを和らげました。ただし、このルールには例外が 1 つあります。ルート Node に到達し、そのハッシュ コードを返すまで、階層を上に移動する Node クラスのメソッドを作成しました。ハッシュ コードは、1 つのオブジェクトを除いて、すべて同じです。一言で言えばRAGE。


初めての (比較的) 大規模な C# アプリケーションの作成が終わりました。しかし、私が失敗した重大なバグを発見したと思います。

私のアプリは XML ファイルを解析し、オブジェクトの階層を作成します。各オブジェクトは Node クラスから継承し、子のリストと親ノードの参照を使用します。

この構造をコピーできるようにする必要がありました。概念は、初期構造がデフォルト データを保持し、独自のコピーを取得して、それを使用しながら変更できるというものです。そこで、一般的なDeepClone< T >拡張メソッドを使用して、 BinaryFormatterでそれを行いました。

私の質問は、私はすでに答えを知っている(そして恐れている)と感じていますが、これにより、これらすべての親ノードと子ノードの参照を再割り当てするという問題が残りますか?


免責事項: これを書き終えると、私が犯したすべての設計ミスと、これを含め、どのように回避できたのかに気づきました。私の弁護では、大学での今学期は、データ構造のクラスを受講するのは初めてです。;) これを解決するのに役立つ、実装に失敗したツリーの重要な部分があることを完全に期待しています。>_<

4

1 に答える 1

1

いいえ。シリアル化プロセスはオブジェクト間の参照を記録し、逆シリアル化プロセスはそれらの関係を復元します。

編集:私があなたの質問を誤解しない限り、それはあなたが何を意味したのか正確には明確ではありません。クライアントコードが複製された構造に変更を加えたら、それを実行したい場合は、それらの変更をメインのデータ構造に組み込むのはあなた次第です。

IEditableObjectこの種のものを処理するためのより正式な方法を検討することをお勧めします。編集前にオブジェクトのクローンを作成する手段としてシリアル化を引き続き使用することもできますが、インターフェイスはより標準化されます。

于 2010-09-03T19:58:59.033 に答える