IDisposableはいいぞ という話
IDisposableとは?
System.IDisposableのこと
基本的にC#では色々な解放処理は自動でやってくれる
しかし明示的に解放をしたい時もある
そのような時に強力な力を発揮するインターフェイス!
実際の使用例
ファイル読み込み
using (StreamReader sr = new StreamReader("何かファイル"))
{
var text = sr.ReadToEnd();
}
ファイルを開いた際には閉じる必要がある
これをIDisposableを使うことで自動で閉じるような作りになっている
何がいいぞなのか?
早期リターンとの相性が良い
例えば何か処理を行なった後に解放というような流れ
この時に早期リターンを使い途中で抜けた場合、解放処理まで流れない
もしくは早期リターン内で解放処理を呼び出しという とてもナンセンスなコードになる
あまりよろしくない
var ex = Example();
/* 何かしらの処理 */
if(/* 早期リターン */) return;
ex.Close();
解放処理を確実に行なえるため、早期リターンでの途中抜けをしても問題がなくなる
とてもクール!
using (new ExampleScope())
{
if(/* 早期リターン */) return;
/* そして処理は続く・・・ */
}
解放忘れがなくなる
usingスコープで宣言さえすれば、あとは解放処理を叩く必要がなくなる
自分以外の人が使う時に、「え?これ解放しないといけないの?」という現実競合が起こらなくなる!
実装の仕方
IDisposableの実装
public class Example : IDisposable
{
public Example()
{
/* コンストラクタ */
}
public void Dispose()
{
/* 解放処理をここへ */
}
}
簡単に実装できる
使い方はusing(new Example()){/*処理*/}で呼び出せばいいだけ
まとめ
IDisposableはいいぞ