このコードを持つ:C#BinaryWriterまたはBinaryReaderをusingブロックで閉じる必要がありますか?
using (BinaryWriter writer = new BinaryWriter(File.Open(ProjectPath, FileMode.Create)))
{
//save something here
}
我々はBinaryWriterをクローズする必要がありますか?そうでない場合、なぜですか?
このコードを持つ:C#BinaryWriterまたはBinaryReaderをusingブロックで閉じる必要がありますか?
using (BinaryWriter writer = new BinaryWriter(File.Open(ProjectPath, FileMode.Create)))
{
//save something here
}
我々はBinaryWriterをクローズする必要がありますか?そうでない場合、なぜですか?
ブロックがすべてusing
ブロックにラップされている限り、明示的にClose
を呼び出す必要はありません。
ブロックusing
ブロックはオブジェクトが確実に廃棄され、BinaryWriter
ではClose
とDispose
のメソッドを交換できます。 (Close
メソッドは、背後でDispose
を呼び出すだけです)。
そこにあるコードでは、使用ブロックを終了するとファイルを閉じるので、closeを呼び出す必要はありません。
usingステートメントを使用しない唯一の理由は、BinaryWriterで処理した後でもファイルを開いておきたい場合です。その場合は、BinaryWriterに渡す代わりに参照を保持する必要があります。そのようなコンストラクタ。
コード例に従ってusingステートメントを使用すると、Disposeが呼び出され、基になるストリームが閉じられます。あなたはリフレクターを介してこれを見ることができます:
protected virtual void Dispose(bool disposing)
{
if (disposing)
{
this.OutStream.Close();
}
}
使用してブロックをautomaticllyにバイナリライターを閉じてGC'edされる状態に入れます。ブロックの使用は、ストリームの例外処理とクローズを行うための構文的砂糖です。
ライターを使用ブロックにラップすると、ライターが廃棄されると自動的にクローズされます。この場合、ライターを明示的に閉じる必要はありません。
違うタイプであるにもかかわらず、これはhttp://stackoverflow.com/questions/1070667/is-is-necessary-to-dispose-dbcommand-after-use/の複製です。私は閉会に投票したいが、その日の私の限界に達している。私はそれを実装するすべてのクラスのために "私はIDisposableを実装するクラスを処分する必要があります"という質問はしないことをお勧めします。あなたのお気に入りのIDisposable質問の複製としてクローズすることを検討してください。 –
これは、ドキュメント/ APIの設計上の欠陥であると考えています。間違いがあると警告が表示され、Close()呼び出しがDisposeと同等であることを文書に明記する必要があります。最初は完全に冗長なClose()呼び出し)。 –