C#基本

[C#] ブロック内でのみ有効なオブジェクトを定義する(using)

2022年1月26日

ブロック内でのみ有効なオブジェクトを定義するには、using句を使用します。

不要となったオブジェクトは何もせずとも .NetFrameworkにより自動的に解放されますが、
自動解放を待たずに即時解放したい時にはusing句を使用します。

サンプル

例1)ブロック内でのみ有効な変数fsを定義する


using System.IO;
using System.Text;

using(FileStream fs = new FileStream(@"C:\test.txt", FileMode.Open))
{
  byte[] dt = new byte[100];
  fs.Read(dt, 0, dt.Length);

  Console.WriteLine(Encoding.ASCII.GetString(dt));
}

上の例で変数fsは、using句を抜けた時点で即時解放されます。

オブジェクトを複数定義するサンプル

オブジェクトを複数指定したい場合も以下のように記述できます。

例2-1)ネストするパターン


using System.IO;
using System.Text;

using(FileStream fs = new FileStream(@"C:\test.txt", FileMode.Open))
{
  using(StreamReader sr = new StreamReader(@"C:\test2.txt"))
  {
    //処理
  { 
}

例2-2)並べるパターン


using System.IO;
using System.Text;

using(FileStream fs = new FileStream(@"C:\test.txt", FileMode.Open))
using(StreamReader sr = new StreamReader(@"C:\test2.txt"))
{
    //処理
}

備考

  • usingの後ろのカッコ内にブロック内でのみ有効としたいオブジェクトを指定します。
  • 指定できるオブジェクトは、IDisposableインターフェイスが実装されているオブジェクトのみです。

-C#基本