2015-06-21 67 views
2

为什么Stream类实现IDisposable? 我认为Stream类本身没有任何非托管资源。 当然,某些子类具有非托管资源(例如FileStream),但并非所有子类都具有非托管资源(例如MemoryStream)。为什么Stream类实现IDisposable?

如果上述问题的答案是“因为Stream类的子类可能有非托管资源”,那么为什么Object类没有实现IDisposable?

+5

很难说真的,我们可以假设,或假设,或考虑,但除非图书馆平台的人之一回答,我们不知道。很可能是因为当你将一个Stream对象传递给一个StreamReader(作为一个实例),然后丢弃StreamReader时,Stream也将被处置。由于大多数实际的Stream实现将以某种方式与资源相关,我想他们从一开始就明确表示这是预期的。 –

回答

1

没有人说资源必须是非托管的。它有需要清理的资源。您可以使用Close()完成同样的事情,但是您的想法是,您可以将它与using语句一起使用,然后即使在出现异常情况下,也会保证清理资源。

using (var s = new System.IO.MemoryStream()) 
{ 
    //do something. 
} 
相关问题