usingキーワードには2つの使い方があります。
- using ディレクティブ(名前空間の使用)
- using ステートメント(IDisposableオブジェクトの破棄)
この記事ではusingディレクティブの使い方について説明していきます。
名前空間(namespace)について
名前空間は関連するクラスにまとめて名前を付けて管理するためのものです。
よくサンプルで使っているConsole.WriteLineメソッドの定義を見てみるとこんな感じになっています。
namespace System
{
public static class Console
{
// --- 省略
public static void WriteLine(string? value) { .... }
// --- 省略
}
}
namespace 名前空間名 { } の中に定義された型(クラスなど)はその名前空間に属することになります。なのでConsole.WriteLineメソッドは、「名前空間SystemにあるConsoleという型(クラス)が持っているWriteLineメソッド」ということになります。
ほかにも名前空間Systemにはいろいろなクラスが属しています。
ちゃんと正式名称で呼び出そうとすると「System.Console.WriteLine」となります。
で、usingを使うと名前空間の部分を省略することができます。
ユーザー定義の名前空間
VisualStudioでプロジェクトを作成するとデフォルトでプロジェクト名が名前空間となる。
using System;
namespace TestProject //プロジェクト名が名前空間名として使用される
{
class Program
{
static void Main()
{
Console.WriteLine("Hello, World!");
}
}
}
ファイルスコープの名前空間宣言
C#10からユーザー定義の名前空間宣言がファイル内に1つ場合に波かっこ { } が省略できるようになりました。これによりインデント(タブで段落を下げる)しなくてよくなり見やすく、スペースの節約につながる。省略した場合、そのファイル内の後続の宣言がすべて名前空間のメンバーになります。
using System;
//宣言より上にクラスなどの定義はできない
//波かっこ { } を省略した名前空間宣言
namespace TestProject;
//名前空間「TestProject」のメンバーになる(TestProject.Program)
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Hello, World!");
}
}
//名前空間「TestProject」のメンバーになる(TestProject.ClassSample)
class ClassSample { }
using ディレクティブ(directive)の使い方
usingディレクティブはusing をソースファイルの先頭(クラスの外側)に書いて、そのファイル(~.cs)内で使用する名前空間(namespace)を指定します。こんなのです。
using System; // 名前空間 System を使う
using System.IO; // 名前空間 System.IO を使う
usingを使うとそのソースファイル内でusingで指定した名前空間に属する型(クラス、構造体など)を使用する際に名前空間を省略して書くことができます。
class Program
{
public static void Main()
{
// usingで名前空間を指定しない場合、
// 名前空間.型名.メソッド名と書く必要がある
System.Console.WriteLine("usingなし");
}
}
using System; // 名前空間 System を使う
class Program
{
public static void Main()
{
// usingで名前空間を指定した場合は、
// 名前空間を省略して「型名.メソッド名」
Console.WriteLine("usingあり");
}
}
名前空間を別名(エイリアス)で使用する
名前空間に別名を付けてそのファイル内で使用することができます。
// using 別名 = 名前空間
using Sys = System;
class Program
{
public static void Main()
{
// 別名.型名.メソッド名 で呼び出す
Sys.Console.WriteLine("エイリアスを使用");
}
}
using static ディレクティブ
「using static 名前空間.型名」 と指定すると、そのソースファイル内で名前空間.型名に属する静的(static)メンバーを使用するときに名前空間.型名を省略して書くことができます。
// using static 名前空間.型名
using static System.Console;
class Program
{
public static void Main()
{
// 名前空間.型名 を省略して、メソッド名だけで呼び出せる
WriteLine("using staticを使用");
}
}
global 修飾子
globalをusingに追加するとそのプロジェクト内のすべてのファイルでusingが適用されるようになる。
C# 記事まとめページに戻る(他のサンプルコードもこちら)
コメント