10

このコードを持つ:

using (BinaryWriter writer = new BinaryWriter(File.Open(ProjectPath, FileMode.Create)))
{
   //save something here
}

BinaryWriter を閉じる必要がありますか? そうでない場合、なぜですか?

4

5 に答える 5

19

すべてがブロックにまとめられている限り、using明示的に呼び出す必要はありませんClose

このusingブロックにより、オブジェクトが確実に破棄され、CloseDisposeメソッドが で交換可能になりBinaryWriterます。(CloseメソッドDisposeは舞台裏で呼び出すだけです。)

于 2009-07-03T13:50:05.793 に答える
4

そこにあるコードでは、using ブロックを終了するとファイルが閉じられるため、明示的に close を呼び出す必要はありません。

using ステートメントを使用しない唯一の理由は、BinaryWriter を使用した後もファイルを開いたままにしておく場合です。

于 2009-07-03T13:48:12.457 に答える
4

コード例に従って using ステートメントに入れると、基になるストリームを閉じる Dispose が呼び出されます。これは、Reflector で確認できます。

protected virtual void Dispose(bool disposing)
{
    if (disposing)
    {
        this.OutStream.Close();
    }
}
于 2009-07-03T13:50:12.080 に答える
0

using ブロックは、バイナリ ライターを自動的に閉じて、GC される状態にします。ブロックの使用は、例外処理とストリームのクローズを自分で行うための構文糖衣です。

于 2009-07-03T13:51:50.453 に答える
0

ライターを using ブロックでラップすることにより、ライターが破棄されたときに自動的に閉じられます。したがって、この場合、ライターを明示的に閉じる必要はありません。

于 2009-07-03T13:51:57.363 に答える