方法: グローバル名前空間エイリアスを使用する (C# プログラミング ガイド)
グローバル名前空間のメンバーにアクセスできると、そのメンバーが同名の別のエンティティによって隠される可能性がある場合に役立ちます。
たとえば、次のコードでは、Console は、System 名前空間の Console 型ではなく、TestApp.Console に解決されます。
using System;
class TestApp
{
// Define a new class called 'System' to cause problems.
public class System { }
// Define a constant called 'Console' to cause more problems.
const int Console = 7;
const int number = 66;
static void Main()
{
// The following line causes an error. It accesses TestApp.Console,
// which is a constant.
//Console.WriteLine(number);
}
}
System.Console を使用すると、System 名前空間が TestApp.System クラスによって隠されているため、依然としてエラーになります。
// The following line causes an error. It accesses TestApp.System,
// which does not have a Console.WriteLine method.
System.Console.WriteLine(number);
ただし、次のように global::System.Console を使用すると、このエラーを回避できます。
// OK
global::System.Console.WriteLine(number);
左の識別子が global の場合、右の識別子の検索はグローバル名前空間から開始されます。 たとえば、次の宣言は、グローバル空間のメンバーとして TestApp を参照します。
class TestClass : global::TestApp
System という名前の独自の名前空間を作成することはお勧めしません。そのようなコードに遭遇することはほとんどありません。 ただし、大型のプロジェクトでは、フォームによっては名前空間の重複が実際に発生する可能性があります。 そのような場合は、グローバル名前空間修飾子によって、ルート名前空間を指定できます。
使用例
次の例では、System 名前空間を使用して TestClass クラスを格納しています。そのため、System 名前空間によって隠されている System.Console クラスを参照するために global::System.Console を使用する必要があります。 また、System.Collections 名前空間を参照するのに colAlias エイリアスを使用するため、名前空間の代わりにこのエイリアスを使用して Hashtable のインスタンスを作成しています。
using colAlias = System.Collections;
namespace System
{
class TestClass
{
static void Main()
{
// Searching the alias:
colAlias::Hashtable test = new colAlias::Hashtable();
// Add items to the table.
test.Add("A", "1");
test.Add("B", "2");
test.Add("C", "3");
foreach (string name in test.Keys)
{
// Searching the global namespace:
global::System.Console.WriteLine(name + " " + test[name]);
}
}
}
}