5

In .Net the Component class exposes a Disposed event. It also provides a protected member OnDispose(bool disposing).

What is the best practice for a custom component that extends Component? Override OnDispose(bool) or attach an event handler to Disposed on construction?

My feeling is that one should override OnDispose(bool) and seal the class.

Thoughts?

4

3 に答える 3

6

通常、イベントはコンシューマーによって使用され、イベントが発生したときに通知を受けることができます。Type を拡張していて、リソースをクリーンアップする必要がある場合は、Dispose(bool disposing) をオーバーライドする必要があります

Spence はイベント ハンドラーについて部分的に正しいです。複数のイベントを割り当てることができますが、問題は、イベントが処理される順序を保証できないことです。

クラスの封印は、多くの場合、何を設計しているかによって異なります。

FxCop ルールにも良い情報があります: http://msdn.microsoft.com/en-us/library/ms244737(VS.80).aspx

于 2009-01-19T01:50:43.170 に答える
2

コンポーネントの実装者はイベントハンドラーにアクセスできるため、ディスポーザーの実装を誤って登録解除する可能性があるため、動作をオーバーライドすることをお勧めします。ステートフル オブジェクトや外部インターフェイスなどがある場合は、ベース ディスポーザーを呼び出す前に破棄タスクを実行する必要がある場合があるため、カスタム コンポーネントの動作によっては、これを行う必要があると思います。

于 2009-01-19T01:41:58.213 に答える
1

この問題について聞いたことがあるように、継承者が基本クラスの OnXxxxx メソッドをオーバーライドし、ユーザーが Xxxxx イベントを処理するのは .Net 標準です。

于 2010-01-11T16:36:53.633 に答える