2013年1月26日

C#のDisposeメソッドの意義

はてブの整理を行っていた時に掘り起こしました。

@ITの掲示板で、以下の質問がありました。
Dispose の意味が未だわからないのですが
質問の概要は、なんで finally で Dispose の呼び出しを保証しないといけないのか?
という事なのですが、当時いろいろなC#の入門サイトを見ていた私も不思議でした。

今改めて考えてみると、

「Dispose の呼び出しを必ずしないといけない」と規則のように考えるから混乱するのであって、
Disposeメソッドがあるようなクラスは、ほぼ何かのリソースを確保していて、
それを開放しないと、リークしてしまいます。
try してリークしたくなかったら  finally にちゃんとDispose書いとかないと抜け道ができるよ。
リソース開放されないの気持ち悪いでしょ。何かのバグになるかもよ。
だからfinallyにつけとこうよ。

という事なんだと理解しています。
しかし、C#には usingステートメントという便利なものがあるのだから、そもそもこの議論は無意味なんですよね。