我已经告诉System.IO.MemoryStream不必在被包装使用的块,因为没有基本的资源,这有点违背我一直都告诉流("如有疑问,请使用使用 ") .
这是真的?为什么MSDN示例使用一个(总结如下)?
using(MemoryStream memStream = new MemoryStream(100))
{
// do stuff
}
Run Code Online (Sandbox Code Playgroud)
jas*_*son 26
C#成语是如果一个对象实现,IDisposable那么你使用一个using块.这将允许正确处理对象使用的所有资源.你不应该知道实现细节MemoryStream.你知道的是它实现了IDisposable所以你应该妥善处理它.此外,您认为您现在知道它不需要释放任何资源,但您如何知道将来MemoryStream不会更改其底层实现,以便它确实使用需要释放的资源Dispose?你没有,所以既然它实现了IDispoable你现在只使用模式就有更多面向未来的代码.其次,如果您将来更改代码以使用Stream具有托管资源的其他类型,该怎么办?通过包装MemoryStream在一个using块,现在你减少日后的维护问题; 再次,这是使用对象的正确方法,特别Stream是实现的方法IDisposable.第三,它是一种向读者发出信号的明确方式,即您已经完成了使用该对象; 这是您的代码的读者在看到您正在使用实现的对象时期望看到的内容IDisposable.最后,这是当前的实施MemoryStream.Dispose:
protected override void Dispose(bool disposing) {
try {
if (disposing) {
this._isOpen = false;
this._writable = false;
this._expandable = false;
}
}
finally {
base.Dispose(disposing);
}
}
Run Code Online (Sandbox Code Playgroud)
因此,这标志着流是封闭的,不可写的,不可增长的.如果其他人得到了同样的参考MemoryStream,它现在变得无法使用,这可能是一件好事.但这确实是最不重要的问题; 实施细节无关紧要.
使用using块因为MemoryStream实现IDispoable.不要使用using块,因为您认为MemoryStream没有任何需要释放的资源.
如果该类实现了 IDisposable,则应将其释放。
你不需要费心去猜测它是否做了任何重要的事情——这是由班级来决定和实现的。如果该类在对象被处置时不执行任何操作,那么实际上就没有任何成本,因此也没有什么坏处。
封装是面向对象开发的基石之一。为什么要不遗余力地打破这一点,尤其是在没有充分理由的情况下?
| 归档时间: |
|
| 查看次数: |
6137 次 |
| 最近记录: |