我不知道如何檢查它,例如:在流中環繞流 - 將包裝的流妥善處理?
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調用的對象在任何成員/參數IDisposable對象上的Dispose。 –
這好像是說你不能依賴包裝類不會崩潰 - 使用一個我不能依賴的框架的關鍵點是什麼? – argh
在他的例子中使用的類很好,但是如果OP採取這種表示,對於IDisposable對象的所有組合都可以,這會出現問題。 –