HOWTO · Csharp

C# の名前空間エイリアス

このチュートリアルでは、サンプル コードを使用して C# の名前空間エイリアスについて説明します。

このページの内容

このチュートリアルは、C# の名前空間エイリアスの概念を理解するのに役立ちます。 この概念を完全に理解するのに役立つデモ コードを実装します。

C# の名前空間

C# では、名前空間を使用してメソッド、クラス、構造体、および列挙型を論理的に整理し、それらを効率化し、関数とクラスのスコープを制御します。

型または名前空間のエイリアシングは、コードを理解しやすくし、開発者の時間を節約するのに役立ちます。 型エイリアスは、単一の名前空間から特定のクラスまたは関数にエイリアスを設定する場合に便利です。

using キーワードを使用すると、C# でこれらの機能にアクセスできます。

C# の using ディレクティブ

C# の using コンパイラ ディレクティブを使用して、スコープを定義できます。 名前空間のエイリアスを作成したり、クラスの静的メンバーをインポートしたり、他の名前空間から特定の型をインポートしたりするためにも使用できます。

コンソールの入出力は、プログラミングの基本です。 C# では、System 名前空間の Console クラスを使用して、コンソール操作、つまり入力または出力を実行します。

WriteLine()、ReadLine() などにアクセスするために using System として C# プロジェクトで使用したことがあるはずです。

C# のエイリアス

エイリアスは、名前空間/クラスの長い名前を短い名前に置き換えることで、あいまいなステートメントやクラスを回避するのに役立ちます。 元の論理機能を再トレーニングします。

開発者はエイリアスを使用して、名前空間の機能をより迅速かつ効果的に利用できます。 プログラムの実行時間に悪影響はありません。 むしろ、開発時間が短縮されます。

まず、概念を理解するために、単純な C# コンソール プロジェクトを作成し、エイリアスを使用しない次のコードを記述してみましょう。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace NamespaceAliasing {
  class Program {
    static void Main(string[] args) {
      Console.WriteLine("Hi! I am a Console.WriteLine");
      Console.Write("Let me know your good name: ");
      var name = Console.ReadLine();
      Console.WriteLine("Welcome: " + name);
      Console.ReadKey();
    }
  }
}

入力として user と入力すると、出力は次のようになります。

Hi! I am a Console.WriteLine
Let me know your good name: user
Welcome: user

Visual Studio でコンソール C# プロジェクトを作成すると、いくつかの基本的な名前空間が自動的にインポートされます。 ご覧のとおり、using System およびその他の名前空間は、ソース ファイルの上にインポートされます。

名前空間をインポートすると、コンパイラは、その名前空間からすべてのメンバー クラス、メソッド、および変数にアクセスする必要があることを認識します。 したがって、System 名前空間をインポートすることで、ReadLine()、WriteLine()、Write() メソッドにアクセスできます。

次に、関連するメソッドを呼び出すときに常に入力する必要がないように、Console クラスのエイリアスを作成しましょう。 次のコードでは、エイリアス S を System.Console に作成しました。

これで、Console と入力する代わりに、このエイリアス S を使用してコンソール メソッドにアクセスできます。

エイリアスは識別子の単なる別の名前であることに注意することが重要です。したがって、以前の識別子は以前に使用可能だったように機能します。

たとえば、次のコードでは、エイリアスを宣言する前と同様に、System.Console に引き続きアクセスでき、機能します。

using S = System.Console;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace NamespaceAliasing {
  class Program {
    static void Main(string[] args) {
      S.WriteLine("Hi! I am a S.WriteLine");
      S.Write("Let me know your good name: ");
      var name = S.ReadLine();
      S.WriteLine("Welcome: " + name);
      System.Console.WriteLine("I am Console.WriteLine");
      S.ReadKey();
    }
  }
}

出力:

Hi! I am a S.WriteLine
Let me know your good name: user
Welcome: user
I am Console.WriteLine

エイリアスのもう 1つの用途は、異なる名前空間の複数のクラスを使用する必要があるが、型が同じ名前である場合です。

これを実装するには、特定のクラスを参照する完全な名前を使用するか、エイリアスを使用して名前空間とアクセス タイプのエイリアスを作成します。

次の例は、2つの名前空間に同じ名前のメソッドがあるシナリオを示しています。

using S = System.Console;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace NamespaceAliasing {
  using Alias1 = NameSpace1.ClassOne;
  using Alias2 = NameSpace2.ClassTwo;
  class Program {
    static void Main(string[] args) {
      var object1 = new Alias1();
      object1.Sample();
      var object2 = new Alias2();
      object2.Sample();
      S.ReadKey();
    }
  }
}
namespace NameSpace1 {
  public class ClassOne {
    public void Sample() {
      S.WriteLine("I am a Sample from Namespace1");
    }
  }
}

namespace NameSpace2 {
  class ClassTwo {
    public void Sample() {
      S.WriteLine("I am a Sample from Namespace2");
    }
  }
}

出力:

I am a Sample from Namespace1
I am a Sample from Namespace2

上記のコード スニペットには、NameSpace1 と NameSpace2 という名前の 2つの名前空間があります。 どちらも、それぞれ ClassOne と ClassTwo, というクラスを持っています。

両方の名前空間のメソッドは同じ名前を持っているため、名前だけを使用してそれらを呼び出した場合、つまり Sample() では、コンパイラはどの名前空間から呼び出されているかを特定できません。

正しく実行するには、Namespace1.ClassOne.Sample() と入力して、それへの完全な参照を指定する必要があります。

コードで複数回使用すると、難しくて曖昧になります。 この問題は、上記のコード例で作成した名前空間のエイリアスを作成することで解決できます。

毎回 Namespace1.ClassOne.Sample と入力する必要はありません。 代わりに、エイリアス Alias1 と Alias2 を使用できます。

エイリアシングは、クラスの静的メンバーを参照し、参照全体を入力するのではなく、名前で使用できます。 たとえば、System 名前空間の Math クラスには、Sqrt() のような静的関数と、PI や E のような静的メンバーが含まれています。

以下は、エイリアスを作成して別の名前空間から静的関数を呼び出す例です。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static NameSpace1.SampleClass;

namespace StaticAliasing {
  class Program {
    static void Main(string[] args) {
      function1();
      Console.ReadKey();
    }
  }
}
namespace NameSpace1 {

  public class SampleClass {
    public static void function1() {
      System.Console.WriteLine("I am a static function.");
    }
  }
}

出力:

I am a static function.

プログラム全体で function1() を複数回使用する必要があると想像してください。 毎回 NameSpace1.SampleClass.function1 と入力する必要があります。

しかし、今ではその名前で呼ぶことができます。 詳細については、C# でのディレクティブの使用 を参照してください。