私には、例えば、それを確認する方法がわからない:ストリーム内のストリームのラッピング - ラップされたストリームは適切に配置されますか?
using (var stream = new StreamWriter(someStream))
{
stream.Write("");
}
これは次のように動作します:
using (var stream1 = someStream)
{
using (var stream2 = new StreamWriter(stream1))
stream.Write("");
}
または私はGZipStreamまたは任意の他のストリームにラップしたい場合は...最初の例はすべての下層ストリームを処理しますか?
更新:最後に、それは私を襲った
- 自分自身Streamクラスを実装:
class MyStream : Stream
{
// fake stream implementation
protected override void Dispose(bool disposing)
{
Console.WriteLine("disposing in my class");
base.Dispose(disposing);
}
}
class Program
{
static void Main(string[] args)
{
MyStream stream = new MyStream();
DoSomething(stream);
stream.Dispose();
Console.WriteLine("end of program");
}
private static void DoSomething(Stream stream)
{
using (var writer = new StreamWriter(stream))
{
Console.WriteLine("inside using statement");
}
Console.WriteLine("after writing");
}
}
と結果:
inside using statement
disposing in my class
after writing
disposing in my class
end of program
downvoter ....なぜですか?私が言ったことは正しかった、あなたは*任意のメンバ/パラメータIDisposableオブジェクトにDisposeを呼び出すIDisposableを実装するオブジェクトに*依存するべきではありません。 –
クラッシュすることなくクラスをラッピングすることに頼ることができないと言っているように - 私は絶え間なく行動することができないフレームワークを使用する点は何ですか? – argh
彼の例で使用されているクラスの場合は問題ありませんが、OPがそれを意味するとすれば、IDisposableオブジェクトのすべての組み合わせに対して問題はありません。 –