当实现using
关键字来实例化一个IO.StreamWriter
对象时,这是否意味着.close
在对象上调用.dispose
?或者它是否重要,因为一旦它使用它就超出了范围并且无论如何都会被垃圾收集?
2 回答
using 关键字将调用Dispose
. 但是,按照惯例,Dispose
并且Close
应该始终执行完全相同的功能,并且可以互换。
因此,任何既提供方法IDisposable
又提供Close()
方法的资源,例如Stream
派生类,都可以在using
块中使用。
框架设计指南中明确解决了这一点:“使Close
实现与Dispose
“......
IDisposable的MSDN 帮助还建议:“具有此类约定的类的实现者可能会选择实现具有自定义名称的公共方法,例如 Close,它调用 Dispose 方法。”
或者它是否重要,因为一旦它使用它就超出了范围并且无论如何都会被垃圾收集?
它不会被垃圾收集 - 在它不再在范围内并且不再被任何对象引用之后,它将有资格进行垃圾收集。这意味着它将(至少如果编写正确)最终会被清理,但它可能不会在很长一段时间内发生 - 包括直到程序终止。using 块导致资源(而不是内存),例如流,立即关闭。
Using
Dispose
仅在范围末尾调用。但是,对于诸如 , 之类的类StreamWriter
,Dispose
最终会在Close
内部调用。
或者它是否重要,因为一旦它使用它就超出了范围并且无论如何都会被垃圾收集?
Using
这是一个误解:块和方法的全部原因Dispose
是对象没有在作用域结束时立即被垃圾收集。