2012-04-20 11 views
2

化学分析機器のシーケンスコンバータを作成しました。各行をオブジェクトとして扱い、そのオブジェクトの各フィールドを別のオブジェクトとして扱います。行がリストに追加されるとき、私は注文番号付けのようないくつかのフィールドオブジェクトでいくつかの更新を行う必要があるので、その行内の各フィールドオブジェクトを指すデリゲートを実装しました。この問題は、行オブジェクトを複製しようとすると、デリゲートが元のオブジェクトを指していて、フィールドメンバを更新するだけで発生します。私は、クローン上のリスナーの登録を解除し、それを元に戻そうとしましたが、元のオブジェクトでコードを実行しています。すべてのリスナーの登録を解除してから、クローンを作成して元のクローンとクローンに登録する必要がありますか?これを行う最善の方法は何ですか?内部デリゲートを使ってオブジェクトをクローンする方法

2番目の質問:Delegate.RemoveAll関数を使用しようとしましたが、何を渡すべきかを特定できませんでした。ターゲットとメソッドを代理人といいます。それを使った人はいますか?

+4

ベストプラクティス:ここでは代議員を避けてください。 –

+0

これはDataTableオブジェクトが必要なように聞こえますか? –

答えて

0

デリゲートを使用すると、ステートレスではなくステートフルなオブジェクトになりました。ステートレスなオブジェクトを実現するには、すべてのプロパティを自己完結型にする必要があります。そのため、クローン操作はクローンでも元のものでなくてもかまいません。

それはステートフルオブジェクトであるので、一つはスマートに、オリジナルを横断し、元の代表者が、適切なもの、独自のせずに新しいオブジェクトを再作成することができ、管理オブジェクト(またはコピーコンストラクタ)を作成する必要があります。

関連する問題