C# には using というキーワードがありますが、文脈によって意味が大きく異なります。本記事では、混同しやすい using ディレクティブと using ステートメントの違いについてわかりやすく解説します。
using ディレクティブとは?
using ディレクティブは、名前空間や型を省略して記述できるようにするための構文です。主にファイルの先頭に記述されます。
例:
using System;
class Program
{
static void Main()
{
Console.WriteLine("Hello World");
}
}このように System.Console.WriteLine を Console.WriteLine と省略できるようになります。
補足
- C# 10 からはファイルスコープの using ディレクティブも導入され、
global usingのような機能もあります。
using ステートメントとは?
using ステートメントは、IDisposable インターフェイスを実装したオブジェクトのリソースを自動的に解放するために使用します。
例:
using (var reader = new StreamReader("sample.txt"))
{
string content = reader.ReadToEnd();
Console.WriteLine(content);
}このように using ブロックを抜けた時点で Dispose() が自動で呼ばれ、リソースリークを防ぐことができます。
C# 8以降の簡略記法:
using var reader = new StreamReader("sample.txt");
string content = reader.ReadToEnd();
Console.WriteLine(content);ブロックを省略でき、より読みやすくなりました。
違いをまとめると
| 用途 | using ディレクティブ | using ステートメント |
|---|---|---|
| 目的 | 名前空間の省略 | リソースの自動解放 |
| 使用位置 | ファイル先頭 | メソッド内など任意の場所 |
| 関連対象 | 名前空間・型 | IDisposable を実装した型 |
| 処理の影響 | コードの可読性向上 | メモリリーク防止・安全なリソース管理 |
まとめ
using は C# において 2 つのまったく異なる意味を持つ重要なキーワードです。名前空間のインポートと、リソースの自動解放。この違いをしっかり理解しておくことで、より安全で読みやすいコードを書くことができます。
もし using の使い方に迷ったら、どちらの文脈かを見極めて正しく使い分けるようにしましょう。
