私は C# の学習を始めたばかりです (Java と C++ の経験あり)。手動のガベージ ディスポーザについて質問があります。C# でオブジェクトを手動で破棄することは可能なのでしょうか? インターフェイスについては知っていますが、自分が作成していないクラスを扱っていて、そのクラスがインターフェイスを実装していないとしたらどうでしょうか?メソッドがないので、 と はIDisposable
使用できず、常にまたはのいずれかであるため、これもオプションではありません。.Dispose()
using { }
.Finalize
protected
private
(私はただ何が可能この場合はC#で。他の方法がすべて失敗した場合は、継承する仮想ImNotDisposable
クラスはするIDisposable を実装します。
ベストアンサー1
.Net オブジェクトを手動で破棄する必要はありません。それが管理された環境である理由です。
実際、オブジェクトが実際に到達可能であれば、つまりGCにどのオブジェクトを破棄したいかを伝えるために使用できる参照がある場合、そのオブジェクトを収集することは不可能になります。GCは一度もないまだ到達可能なオブジェクトをすべて収集します。
GC.Collect()
一般的なコレクションを強制的に呼び出すことはできますが、これはほとんどの場合、良いアイデアではありません。
代わりに、単に演じる管理されていないリソースを使用せず、プログラム内の他のオブジェクトからアクセスできないオブジェクトは、直ちに破棄されます。このようなことは起こらないことはわかっていますが、この時点では、オブジェクトは他のオブジェクトと同様に単なるメモリ ブロックです。再利用できず、最終的には回収されるため、あなたにとっては死んだも同然です。
についての最後の注意点IDisposable
。これはラップする型にのみ使用してください。管理されていないリソース: ソケット、データベース接続、GDI オブジェクトなど、および時折発生するイベント/デリゲートのサブスクリプション。