0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【C#】Disposeとusingの違い

Posted at

Disposeとは?

Dispose()は、使い終わったリソースを明示的に解放するためのメソッドです。
C#では、ファイル・ネットワーク接続・データベースなど、
メモリ以外の“外部資源”を使うことがあります。

こういったリソースはガベージコレクタ(GC)では自動で片付けてくれません。
そのため、自分で解放する必要があります。

var file = new StreamWriter("test.txt");
file.WriteLine("Hello!");
file.Dispose(); // ←手動で解放

このようにDispose()を呼ぶことで、
ファイルを閉じてリソースを開放します。

でも、もし途中で例外が発生したら、
Dispose()が呼ばれないままリソースが残ってしまいます

using構文とは?

そんなときに便利なのがusing構文です。
usingは、「ブロックを抜けたら自動でDisposeしてくれる」仕組みです。

using (var file = new StreamWriter("test.txt"))
{
    file.WriteLine("Hello!");
} // ← ここで自動的にDispose()が呼ばれる!

これなら、途中で例外が起きても確実にリソースを解放してくれます。
つまり、usingはDispose()を安全・確実に呼ぶための構文なんです。

Disposeとusingの違い

項目 Dispose using
役割 リソースを明示的に解放する 自動でDisposeを呼ぶ構文
タイミング 自分で呼ぶ必要あり スコープを抜けた瞬間
安全性 例外が起きると呼ばれない可能性あり 確実に呼ばれる
実装対象 IDisposableを実装したクラス IDisposableを実装したオブジェクト

まとめ

  • Dispose()は「リソースを片付けるメソッド」
  • usingは「Disposeを自動で呼ぶ仕組み」
  • usingを使えば例外が起きても安全に後処理できる

普段のコードでは、Dispose()を直接呼ぶよりusingを使うのが基本です。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?