Gewusst wie: Verwenden des globalen Namespacealias (C#-Programmierhandbuch)

Die Fähigkeit, auf einen Member im globalen Namespace zuzugreifen, ist nützlich, wenn der Member möglicherweise durch eine Entität gleichen Namens verdeckt ist.

Im folgenden Codebeispiel wird Console nach TestApp.Console aufgelöst, statt nach dem Console-Typ im System-Namespace.

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);
    }
}

Auch die Verwendung von System.Console führt zu einem Fehler, da der System-Namespace von der TestApp.System-Klasse verdeckt wird:

// The following line causes an error. It accesses TestApp.System,
// which does not have a Console.WriteLine method.
System.Console.WriteLine(number);

Sie können diesen Fehler jedoch umgehen, indem Sie global::System.Console folgendermaßen verwenden:

// OK
global::System.Console.WriteLine(number);

Wenn der linke Bezeichner global ist, beginnt die Suche nach dem rechten Bezeichner im globalen Namespace. Die folgende Deklaration verweist beispielsweise auf TestApp als Member des globalen Namespaces.

class TestClass : global::TestApp

Offensichtlich ist vom Erstellen eines eigenen Namespaces mit dem Namen System abzuraten, und Sie werden auch kaum jemals auf derartigen Code treffen. In größeren Projekten ist es allerdings durchaus möglich, dass doppelte Namespaces auf die eine oder andere Weise vorkommen können. In diesen Situationen garantiert der globale Namespacequalifizierer, dass Sie den Stammnamespace angeben können.

Beispiel

In diesem Beispiel schließt der System-Namespace die TestClass-Klasse ein, sodass global::System.Console benötigt wird, um auf die System.Console-Klasse zu verweisen, die durch den System-Namespace verdeckt wird. Außerdem wird mit dem Alias colAlias auf den System.Collections-Namespace verwiesen. Deshalb wurde die Instanz von System.Collections.Hashtable mit diesem Alias statt mit dem Namespace erstellt.

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]);
            }
        }
    }
}

A 1
B 2
C 3

Siehe auch

C#-Programmierhandbuch
Namespaces
. Operator
Operator ::
extern