私たちが使用してブロック内のC#BinaryWriterまたはBinaryReaderをクローズする必要がありますか?

StackOverflow https://stackoverflow.com/questions/1079434

  •  21-08-2019
  •  | 
  •  

質問

このコードを有するます:

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

私たちは、BinaryWriterをクローズする必要がありますか?ない場合、その理由は?

役に立ちましたか?

解決

長いので、それがすべてusingブロックに包まれていますと、あなたは明示的Closeを呼び出す必要はありません。

usingブロックは、オブジェクトが配置されていることを確認し、CloseDispose方法はBinaryWriterに交換可能です。 (Close方法は、ちょうど舞台裏Disposeを呼び出します。)

他のヒント

がないので、基になるストリームを閉じ処分を呼び出しますあなたのコードの例に従ってusingステートメントにそれを置きます。あなたはリフレクターを介してこれを見ることができます:

protected virtual void Dispose(bool disposing)
{
    if (disposing)
    {
        this.OutStream.Close();
    }
}

あなたはそれを使用してブロックを終了したら、あなたは近いexplcitly呼び出す必要はありませんので、それは、ファイルを閉じます。そこに持っているコード付き

あなたは、あなたのBinaryWriterで行われている場合には、あなたがコンストラクタに渡すのではなく、それの参照を保持する必要があり後にファイルがまだ開いようにしたい場合は、

唯一の理由は次のようになりusingステートメントを使用しませんそんなます。

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

作家が配置されたときに

は、使用してブロック内のアップライターを包むことで、近くには自動的に行われます。したがって、この場合には、明示的にライターをクローズする必要はありません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top