rksoftware

Visual Studio とか C# とかが好きです

C# 2.0 以降の新機能の確認 - C# 2.0 - extern エイリアス

C# 2.0 以降の新機能を一つづつ確認していきます。
以前に一度行ったのですが、公式ドキュメント再編でリンク切れしているところを見つけてしまったので。今ならもっと簡潔なサンプルが欠けるところもあるだろうし、せっかくなので今もう一度確認して行きます。

extern エイリアス

 https://docs.microsoft.com/ja-jp/dotnet/csharp/language-reference/keywords/extern-alias
 同じ完全修飾型名を持つ、2 つアセンブリを参照する場合に名前空間のエイリアスを設定できる。

 次の例では同じ名前の ClassLibrary.Class1.WriteLine() を持つ a.dll に A というエイリアスを、b.dll に B というエイリアスをつけるています。

手順

  • ソリューション エクスプローラーで実行プロジェクトの依存関係の中のクラスライブラリ プロジェクト (dll) のプロパティを開きます。
  • エイリアスにそれぞれ a.dll プロジェクトには A、b.dll プロジェクトには B と設定します。
  • 実行プロジェクト内でソースファイルの先頭に extern alias A; extern alias B; を追加します。これで A 名前空間エイリアスと B 名前空間エイリアスが使えるようになります。
  • :: 演算子を使用した名前空間エイリアスを指定でメソッドを呼びます。
extern alias A;
extern alias B;

class Program
{
    static void Main(string[] args)
    {
        A::ClassLibrary.Class1.WriteLine();    // a.dll のメソッドが呼ばれる
        B::ClassLibrary.Class1.WriteLine();    // b.dll のメソッドが呼ばれる
    }
}

a.dll

namespace ClassLibrary
{
    public class Class1
    {
        public static void WriteLine()
        {
            Console.WriteLine("A");
        }
    }
}

b.dll

namespace ClassLibrary
{
    public class Class1
    {
        public static void WriteLine()
        {
            Console.WriteLine("B");
        }
    }
}