3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[C#] IDisposableで計画的に解放処理!

Posted at

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はいいぞ

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?