Mik*_*ien 4 vb.net garbage-collection
实现using关键字以实例化IO.StreamWriter对象时,是否暗示.close在对象上调用或.dispose?或者它是否重要因为一旦它到达终点使用它超出范围并且将被垃圾收集?
using关键字将调用Dispose.然而,约定,Dispose并Close应始终执行完全相同的功能,并且是可以互换的.
因此,任何IDisposable但也提供Close()方法的资源(例如Stream派生类)都可以在using块中使用.
这在框架设计指南中明确说明:"重要的是要使Close实现与Dispose"... 相同.
IDisposable的MSDN帮助也表明:"具有这种约定的类的实现者可能会选择实现一个带有自定义名称的公共方法,例如Close,它调用Dispose方法."
或者它是否重要因为一旦它到达终点使用它超出范围并且将被垃圾收集?
它不会被垃圾收集 - 在它不再在范围内,并且不再被任何对象引用之后,它将有资格进行垃圾收集.这意味着它(至少如果写得正确),最终会得到清理,但可能不会发生很长时间 - 包括直到程序终止.using块导致资源(而不是内存)(例如流)立即关闭.