2

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

2 番目の質問: Delegate.RemoveAll 関数を使用しようとしましたが、何を渡すかわかりませんでした。デリゲートとしてターゲットとメソッドを言います。使ったことある人いますか?

4

1 に答える 1

0

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

これはステートフル オブジェクトであるため、元のオブジェクトをスマートにトラバースし、元のデリゲートを使用せずに新しいオブジェクトを再作成できる管理オブジェクト (またはコピー コンストラクター) を作成する必要があります

于 2012-04-20T13:07:30.127 に答える