StreamクラスはIDisposableインターフェイスを実装しているので、Streamをusingステートメント内で使うことが出来ます。 この場合、Closeメソッドを呼び出さなくてもusingステートメントから抜ける時点でそれに相当する処理が自動的に行われます。 そのため、上記のコードと次のコードは、同等のものとなります。
usingステートメントを使ってStreamを閉じる
using System;
using System.IO;
class Sample {
static void Main()
{
// Streamを開き、usingステートメント内で使用する
using (var stream = File.OpenWrite("sample.dat")) {
var buffer = new byte[8] {0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48};
// streamにデータを書き込む
stream.Write(buffer, 0, 8);
}
// usingステートメントを抜ける時点でCloseメソッドに相当する処理が行われ、streamは閉じられる
}
}
usingステートメントとIDisposableについてはオブジェクトの破棄 §.usingステートメントで詳しく解説しています。
Closeメソッドでストリームを閉じた後は、ほとんどのメソッドの呼び出しとプロパティの参照ができなくなります。 閉じたStreamに対してこれらの操作を行おうとすると例外ObjectDisposedExceptionがスローされます。