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

Die Möglichkeit, auf einen Member im globalen Namespace zuzugreifen, ist nützlich, wenn der Member möglicherweise von einer anderen Entität mit dem gleichen Namen verdeckt wird.

Im folgenden Code wird Console z.B. zu TestApp.Console statt zum Console-Typ im <xref:System>-Namespace aufgelöst.

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

Wenn Sie System.Console verwenden, führt dies immer noch zu einem Fehler, da der System-Namespace von der TestApp.System-Klasse verborgen wird:

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

Diesen Fehler können Sie 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 richtigen Bezeichner im globalen Namespace. Die folgende Deklaration verweist z.B. auf TestApp als Member des globalen Spaces.

class TestClass : global::TestApp

Es wird natürlich nicht empfohlen, dass Sie Ihren eigenen Namespace mit dem Namen System erstellen, und es ist unwahrscheinlich, dass Sie Code finden, in dem dies der Fall ist. In größeren Projekte ist es jedoch mehr als möglich, dass Namespaceduplikate auf irgendeine Weise vorkommen. In derartigen Situationen ist der globale Namespacequalifizierer die Garantie für Sie, den Stammnamespace angeben zu können.

Beispiel

In diesem Beispiel wird der System-Namespace verwendet, um die TestClass-Klasse einzubeziehen, weshalb global::System.Console verwendet werden muss, um auf die System.Console-Klasse zu verweisen, die vom System-Namespace verborgen wird. Darüber hinaus wird der colAlias-Alias verwendet, um auf den System.Collections-Namespace zu verweisen. Deshalb wurde die Instanz einer <xref:System.Collections.Hashtable?displayProperty=fullName> 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