書き込み用のメソッドにストリームを送信しており、それらのメソッドではバイナリ リーダー/ライターを使用しています。リーダー/ライターが破棄されると、またはusing
参照されなくなったときに、ストリームも閉じられますか?
BinaryReader/Writer を送信しますが、StreamReader も使用しています (おそらく、これを回避するべきでしょう。GetLine と ReadLine にのみ使用しています)。ライター/リーダーが閉じられるたびにストリームが閉じられると、これは非常に面倒です。
ベストアンサー1
はい、、、StreamReader
およびStreamWriter
すべてBinaryReader
はBinaryWriter
、呼び出されると、その基礎となるストリームを閉じたり破棄したりしますDispose
。しないただし、リーダー/ライターがガベージ コレクションされた場合は、ストリームを破棄します。リーダー/ライターは、できればステートメントを使用して、常に破棄する必要がありますusing
。(実際、これらのクラスにはファイナライザーがなく、ファイナライザーがあってもよいわけではありません。)
個人的には、ストリームにも using ステートメントを使用することを好みます。using
中括弧なしでステートメントを非常にきれいにネストできます。
using (Stream stream = ...)
using (StreamReader reader = new StreamReader(stream, Encoding.Whatever))
{
}
using
ストリームのステートメントは多少冗長ですが(StreamReader
コンストラクターが例外をスローしない限り)、ステートメントを削除してStreamReader
後日ストリームを直接使用する場合は、適切な破棄セマンティクスが既に存在するため、これはベスト プラクティスであると考えています。