经过大量研究和一些答案/评论的提示后,我将回答我自己的问题。
底层 StreamReader 具有非托管资源,因此我们希望确保它得到正确处理。
底层的 StreamReader 会被自动处理掉吗?
是的。任何 MyReader 对象都是托管资源,它具有底层 StreamReader 和非托管资源。当 MyReader 超出范围时,它不会坐下来占用内存,而是最终被垃圾收集器拾取。垃圾收集器将调用底层 StreamReader 上的 Finalize(),后者又调用其 Dispose() 方法,释放 StreamReaders 非托管资源。
所以,我们不需要实现 IDisposable。
我们应该实现 IDisposable 吗?
是的。我们可以通过实现 IDisposable 并将其最终在上一个答案中转换为立即(或至少尽快)来使该类变得更好。为了获得这些好处,我们还必须在 Using 语句中实例化 MyReader,或者在完成后调用 MyReader 上的 Dispose()。
实现 IDisposable 后,使用 MyReader 的最佳方式是
Using MR As New MyReader("Myfile.txt")
'Do stuff
End Using
或者
Dim MR As New MyReader("Myfile.txt")
'Do stuff
MR.Dispose()
请随时注意我在上述答案中犯的任何错误。我也对如果我们不手动处理 MyReader 及其底层 StreamReader 并允许垃圾收集器执行它会发生什么坏事(如果有的话)感兴趣。