IDisposable
ファイル、ストリーム、データベース接続などは、マネージドメモリ以外の資源を保持することがあります。IDisposableは、利用者が明示的にリソースを解放するための規約です。
using var reader = new StreamReader("input.txt");
string? line = reader.ReadLine();
Console.WriteLine(line);
using宣言を使うと、スコープを抜けるときにDisposeが呼び出されます。例外が発生した場合も、適切に破棄されます。
Disposeとファイナライザー
Disposeは決定的なタイミングでリソースを解放するために呼び出します。ファイナライザーはGCが回収する過程で呼ばれる可能性がありますが、実行時期は保証されません。
所有権
リソースを誰が所有し、誰がDisposeするのかを明確にします。借りているだけのリソースを勝手に破棄しないよう、APIの契約を確認してください。