Gewusst wie: Verwenden des Namespacealiasqualifizierers (C#-Programmierhandbuch)

Aktualisiert: November 2007

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()
    {
        // Error  Accesses TestApp.Console
        //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:

// Error  Accesses TestApp.System
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)
            {
                // Seaching the gloabal namespace:
                global::System.Console.WriteLine(name + " " + test[name]);
            }
        }
    }
}
A 1
B 2
C 3

Siehe auch

Konzepte

C#-Programmierhandbuch

Referenz

Namespaces (C#-Programmierhandbuch)

Operator . (C#-Referenz)

Operator :: (C#-Referenz)

extern (C#-Referenz)