StreamReader を破棄すると、基になるストリームは閉じられますか? 質問する

StreamReader を破棄すると、基になるストリームは閉じられますか? 質問する

書き込み用のメソッドにストリームを送信しており、それらのメソッドではバイナリ リーダー/ライターを使用しています。リーダー/ライターが破棄されると、またはusing参照されなくなったときに、ストリームも閉じられますか?

BinaryReader/Writer を送信しますが、StreamReader も使用しています (おそらく、これを回避するべきでしょう。GetLine と ReadLine にのみ使用しています)。ライター/リーダーが閉じられるたびにストリームが閉じられると、これは非常に面倒です。

ベストアンサー1

はい、、、StreamReaderおよびStreamWriterすべてBinaryReaderBinaryWriter、呼び出されると、その基礎となるストリームを閉じたり破棄したりしますDisposeしないただし、リーダー/ライターがガベージ コレクションされた場合は、ストリームを破棄します。リーダー/ライターは、できればステートメントを使用して、常に破棄する必要がありますusing。(実際、これらのクラスにはファイナライザーがなく、ファイナライザーがあってもよいわけではありません。)

個人的には、ストリームにも using ステートメントを使用することを好みます。using中括弧なしでステートメントを非常にきれいにネストできます。

using (Stream stream = ...)
using (StreamReader reader = new StreamReader(stream, Encoding.Whatever))
{
}

usingストリームのステートメントは多少冗長ですが(StreamReaderコンストラクターが例外をスローしない限り)、ステートメントを削除してStreamReader後日ストリームを直接使用する場合は、適切な破棄セマンティクスが既に存在するため、これはベスト プラクティスであると考えています。

おすすめ記事