&hellipについての説明が必要です。CLRはどのようにIDisposableを実装するクラスを見つけるのですか?
…具体的にどのようにCLR —、ガベージコレクタ—は、
IDisposable
インターフェイスを実装するクラスを見つけます。および…メモリを解放するために(
IDisposable
インターフェイスを実装するすべてのクラスの)Dispose
メソッドを呼び出す方法
&hellipについての説明が必要です。CLRはどのようにIDisposableを実装するクラスを見つけるのですか?
…具体的にどのようにCLR —、ガベージコレクタ—は、IDisposable
インターフェイスを実装するクラスを見つけます。および
…メモリを解放するために(IDisposable
インターフェイスを実装するすべてのクラスの)Dispose
メソッドを呼び出す方法
CLRは廃棄する()を呼び出していない、これは直接またはusing
の文を使用して呼び出すためのユーザコードに任されています。ただし、CLRはfinalizersと呼びますが、これは保証されていません。
CLR **がファイナライザを呼び出している可能性があります。本当に保証はありません。 –
@ダニエル・フェア・ポイント、私は明確にしました。 –
ファイナライザがアプリケーションの終了前に呼び出されることは保証されていませんか? – koumides
Dispose
は自動的に呼び出されません。コンパイラは、using
と記述するか、直接Dispose
を呼び出すと、Dispose
への呼び出しを生成します。
この場合、IDisposableメソッドを実装する必要がある代わりに、リソースを解放するメソッドを作成できます。 try ... finally()で展開している 'using'でも、Disposeメソッドを呼び出します。 IDisposableインターフェイスを実装せずに同じことを行うこともできます。これに対する答えは、私が推測するインターフェースの必要性を説明します。 – Syed
@Syed私はそのコメントを理解していません。 –
私が理解している答えからは、Disposeメソッドを明示的に呼び出す必要があります。私の疑念は、なぜ私たちはIDisposableインターフェイスを実装し、次にDisposeメソッドを実装する必要がある、私たちは直接リソースを解放している他のメソッドを書くことができますです。 – Syed
IDisposableについてもっとお読みください。http://stackoverflow.com/questions/12368/how-to-dispose-a-class-in-net - IDisposableはメモリを解放することとは何の関係もありませんGCはそれをまったく実行しません。 http://stackoverflow.com/questions/732864/finalize-vs-dispose –
@Lasse V. Karlsen:リンクありがとうございました – Syed