このコードを持つ:
using (BinaryWriter writer = new BinaryWriter(File.Open(ProjectPath, FileMode.Create)))
{
//save something here
}
BinaryWriter を閉じる必要がありますか? そうでない場合、なぜですか?
このコードを持つ:
using (BinaryWriter writer = new BinaryWriter(File.Open(ProjectPath, FileMode.Create)))
{
//save something here
}
BinaryWriter を閉じる必要がありますか? そうでない場合、なぜですか?
すべてがブロックにまとめられている限り、using
明示的に呼び出す必要はありませんClose
。
このusing
ブロックにより、オブジェクトが確実に破棄され、Close
とDispose
メソッドが で交換可能になりBinaryWriter
ます。(Close
メソッドDispose
は舞台裏で呼び出すだけです。)
そこにあるコードでは、using ブロックを終了するとファイルが閉じられるため、明示的に close を呼び出す必要はありません。
using ステートメントを使用しない唯一の理由は、BinaryWriter を使用した後もファイルを開いたままにしておく場合です。
コード例に従って using ステートメントに入れると、基になるストリームを閉じる Dispose が呼び出されます。これは、Reflector で確認できます。
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
this.OutStream.Close();
}
}
using ブロックは、バイナリ ライターを自動的に閉じて、GC される状態にします。ブロックの使用は、例外処理とストリームのクローズを自分で行うための構文糖衣です。
ライターを using ブロックでラップすることにより、ライターが破棄されたときに自動的に閉じられます。したがって、この場合、ライターを明示的に閉じる必要はありません。