[C#] エイリアスでクラスや名前空間に別名を付ける方法

[C#] エイリアスでクラスや名前空間に別名を付ける方法

エイリアス(Alias)

C# では、using(エイリアス)ディレクティブ を使うことで名前空間やクラスに別名を付けることができます。

この機能を使うと名前空間をすべて記述する完全修飾名を書かなくても、独自に定義した別名を使って名前空間やクラスを参照できるようになります。

using [別名] = [名前空間やクラス];

クラスの外側に上記のように using を使って任意の名前と名前空間やクラスを紐づけることができます。例えば以下のように使います。

// 文字列 というエイリアスでstring型を参照できるようにする
using 文字列 = System.String;

// 名前空間を別名で定義する
using コンソール = System.Console;

public class Program
{
    public static void Main(string[] args)
    {
        // string a = ""; と同じ
        // 文字型と同じように扱える
        文字列 a = "a";

        // System.Console.WriteLine() と同じ
        コンソール.WriteLine(a.ToUpper()); // A
    }

}

"文字列" というエイリアスを定義して、String型(System.String)を "文字列" という名前で参照できるようにしています。単純に別名として定義されるだけなので使い方は変わりません。

名前空間に対してエイリアスを定義する方法も同様です。System.Console という名前空間を "コンソール" という別名で呼び出せるようにしています。

定義する場所はクラスの外側です。

エイリアスと同一のクラスを区別する方法

同じ名前空間内で定義したエイリアスとほかの名前(変数名やクラス名、名前空間)が重複した場合、それらを区別して指定するために エイリアス修飾子(:) を利用します。意味はドットと同じですが、エイリアス修飾子はエイリアスの後にしか使えません。

つまりドットではなくエイリアス修飾子のコロン(:)を利用しているコードは、必ずエイリアスの方を参照しているということがわかります。

// エイリアスを定義
using A = System;

// エイリアスと同名のクラス
class A { }

public class Program
{
    public static void Main(string[] args)
    {
        // A.Consoleだとクラスと区別できないのでコンパイルエラー
        A::Console.WriteLine("xxx");
    }

}

グローバルエイリアス

global エイリアスというものが用意されており、これを使うと一番外側の階層からたどることができます。

例えば先ほどの例で、最上位の名前空間(グローバル名前空間)においてエイリアスとクラスの名前がバッティングしている場合、エイリアスの方はエイリアス修飾子を使うことで明示的に指定できましたが、クラスのほうは通常の指定はできません。

このような場合には grobal エイリアスを使用することでグローバル名前空間から明示的に指定することが可能になります。

// エイリアスを定義
using A = System;

// エイリアスと同名のクラス
class A { }

public class Program
{
    public static void Main(string[] args)
    {
        var a = new global::A();
    }

}

最上位からたどって指定する場合には、グローバルエイリアスを使って指定します。その際使うのもエイリアス修飾子(::)です。

以上。

C#カテゴリの最新記事