using
オブジェクトをインスタンス化するためにキーワードを実装するとき、それはオブジェクトで呼び出されるIO.StreamWriter
ことを意味しますか?それとも、使用が終了すると範囲外になり、とにかくガベージコレクションされるので、それは重要ですか?.close
.dispose
2 に答える
usingキーワードはを呼び出しますDispose
。ただし、慣例によりDispose
、Close
は常にまったく同じ機能を実行し、交換可能である必要があります。
そのため、派生クラスなど、メソッドをIDisposable
提供するだけでなく提供するリソースは、ブロック内で使用できます。Close()
Stream
using
これは、フレームワーク設計ガイドラインで明示的に対処されています。「実装を「...」Close
と同一にすることが重要です。Dispose
IDisposableのMSDNヘルプでも、次のように提案されています。「このような規則を持つクラスの実装者は、Disposeメソッドを呼び出すCloseなどのカスタマイズされた名前でパブリックメソッドを実装することを選択できます。」
それとも、使用が終了すると範囲外になり、とにかくガベージコレクションされるので、それは重要ですか?
ガベージコレクションは行われません。スコープ内になくなり、オブジェクトから参照されなくなった後は、ガベージコレクションの対象になります。これは、(少なくとも適切に記述されている場合)最終的にはクリーンアップされることを意味しますが、プログラムが終了するまでを含め、長期間は発生しない可能性があります。usingブロックを使用すると、ストリームなどのリソース(メモリではなく)がすぐに閉じられます。
Using
Dispose
スコープの最後でのみ呼び出します。ただし、などのクラスの場合、StreamWriter
内部的Dispose
に呼び出すことになります。Close
それとも、使用が終了すると範囲外になり、とにかくガベージコレクションされるので、それは重要ですか?
Using
これは誤解です。ブロックとメソッドの全体的な理由はDispose
、オブジェクトがスコープの最後ですぐにガベージコレクションされないことです。