我不知道如何检查它,例如:在流中环绕流 - 将包装的流妥善处理?
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对象的所有组合都可以,这会出现问题。 –