2

管理オブジェクトしか含まれていない場合でも、カスタム オブジェクトを破棄する必要がありますか? たとえば、いくつかの List オブジェクトと、いくつかの string および xmldocument タイプを含むカスタム クラスがあります。独自の Dispose メソッドを作成し (IDisposable から継承するのではなく)、それらをクリアして空であることを確認する必要がありますか? 必要であれば、IDisposable からも継承する必要がありますか?

4

3 に答える 3

6

これらの管理対象オブジェクトの1つ以上がIDisposableから継承する場合のみ。

IDisposableオブジェクト(管理対象リソース)がある場合は、IDisposableを実装しますが、デストラクタ/ファイナライザを追加しないでください。

于 2012-04-20T16:01:27.300 に答える
2

経験則として、IDisposable参照する管理対象オブジェクトインスタンスのいずれかが実装する場合は実装する必要がありますIDisposable。その後、実装でそれらを破棄できますDispose

于 2012-04-20T16:02:10.293 に答える
0

nullご覧のとおり、オブジェクトの有効期間の終わりに参照を設定しても、ガベージ コレクターは何も変更されません。含まれているオブジェクトへの残りの参照がカスタム オブジェクトからのものだけである場合、ガベージ コレクターはそれらをガベージ コレクションの対象として扱います (生きているオブジェクトからの参照のみを探すため)。他の場所からの参照がある場合、参照をクリーンアップしても、含まれているオブジェクトは収集されません。

もちろん、別の話は、含まれているオブジェクトの一部が明示的な破棄を必要とする場合、つまり、を実装するIDisposableか、有効期間の終わりに閉じる必要がある場合です (ただし、正しい方法はとにかく実装することですIDisposable)。IDisposable自分で実装し、含まれているオブジェクトを破棄する必要がありますDispose

もちろん、アンマネージドオブジェクトIDisposableを参照する場合は特別な方法で実装する必要がありますが、これは別の話です。

于 2012-04-20T16:06:44.460 に答える