Consider the following code:
using (var ms = new MemoryStream())
{
using(var writer = BinaryWriter(ms))
{
writer.Write(/*something*/);
writer.Flush();
}
Assert.That(ms.Length > 0); // Throws ObjectDisposedException
}
一方面,一个可处置的对象应该处理它的资源;我理解这一点,但另一方面,这个对象没有创建和拥有这个资源,它是提供的 - 调用代码应该承担责任...对吧?
我想不到其他类似的情况,但在框架中,任何接收可处置对象的类都要在其自己的dispose中处理它们吗?
StreamReader
/StreamWriter
的构造函数允许调用者指定是否转移所有权(在 .NET 的后续版本中已经这样做了)。否则,考虑如何编写一个方法,该方法应异步播放从StreamReader
获取的音频数据。播放音频的代码可能对底层流一无所知,而构造StreamReader
的代码可能不知道播放代码何时完成它。在流纯粹为音频播放而打开的常见情况下... - supercat