2012-03-21 7 views
1

私は、自分のCustomEventArgsで渡されたデータをすべて使用し、潜在的に自分自身のために変更する複数の異なるサブスクライバを持つカスタムイベントを持っています。このシナリオでは、ある加入者が別の加入者が使用しているデータを汚染しないようにするためのベストプラクティスと考えられるものは何ですか?パブリッシャがデータのクローンを作成し、各サブスクライバの代理人を個別に呼び出す必要がありますか?データを変更する必要がある場合、加入者はそのデータを複製する必要がありますか?イベントパブリッシャーは、EventArgsで渡されたデータをクローンして、サブスクライバーがデータを変更できないようにする必要がありますか?

ありがとうございます。

答えて

2

通常、派生クラスEventArgsを不変にすることをお勧めします。パブリッシャーは、1つのインスタンスを設定して、すべての代理人を通常どおりに呼び出すことができます。

加入者は、必要に応じて、このデータに基づいて常に独自のクラスを作成できます。

例外として、引数内にHandledという形式のプロパティを設定したい場合があります。この場合、サブスクライバはこの値を上書きすることができます。これは、適切なドキュメントが通常これを正しく処理するのに十分な場合の1つのケースです。

加入者の代理人を個別に呼び出すことはめったにありません。

+1

+1です。また、EventArgs派生クラスのプロパティの型も変更できないように注意してください。 –

関連する問題