ここでのいくつかの回答/コメントからのかなりの調査とヒントの後、私は自分の質問に答えるつもりです。
基になる StreamReader には管理されていないリソースがあるため、適切に破棄されるようにする必要があります。
基になる StreamReader は自動的に破棄されますか?
はい。すべての MyReader オブジェクトは、管理されていないリソースを持つ基になる StreamReader を持つ管理されたリソースです。MyReader が範囲外になると、メモリを占有するのではなく、最終的にはガベージ コレクターによって取得されます。ガベージ コレクターは、基になる StreamReader で Finalize() を呼び出します。これにより、その Dispose() メソッドが呼び出され、StreamReader のアンマネージ リソースが解放されます。
したがって、 IDisposable を実装する必要はありません。
とにかく IDisposable を実装する必要がありますか?
はい。IDisposable を実装し、最終的には前の回答ですぐに(または少なくともできるだけ早く) に変えることで、クラスを改善できます。これらの利点を得るには、MyReader を Using ステートメントでインスタンス化するか、処理が完了したら 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 を手動で破棄せず、ガベージ コレクターにそれを許可しないと、どのような悪いことが起こるか (もしあれば) にも興味があります。