名前空間のエイリアス

名前空間 - C# によるプログラミング入門 | ++C++; // 未確認飛行 C


usingキーワードを使って名前空間エイリアスを定義することができます。

// SystemのエイリアスとしてSを定義
using S = System;

class Program {
    static void Main() {
        // S経由でアクセスできる
        S.Console.WriteLine( "foo" );
    }
}

また既存のクラス名とエイリアス名が同じ場合、「.」で呼び出すとクラスが優先されてしまいます。

// Sという名前空間のエイリアス
using S = System;

class Program {
    // Sというクラスの定義
    class S {}
    
    static void Main() {
        // S.だとクラスの方が優先されるためコンパイルエラーとなる
        S.Console.WriteLine( "foo" );
    }
}
$ csc main.cs
Microsoft (R) Visual C# 2010 Compiler version 4.0.30319.1
Copyright (C) Microsoft Corporation. All rights reserved.

main.cs(9,5): error CS0117: 'Program.S' に 'Console' の定義がありません。

これを回避するためには「::」を使ってSがエイリアスの方だよと明示する必要があります。

using S = System;

class Program {
    class S {}
    
    static void Main() {
        // S::にすればエイリアス指定となる
        S::Console.WriteLine( "foo" );
    }
}
$ main
foo

これをエイリアス修飾子と言うそうです。

あと外部エイリアスってものあるみたいですが、これはまぁこういうのもあるということで覚えておきましょう。