Udostępnij za pośrednictwem


Porady: użycie globalnych aliasów przestrzeni nazw (Przewodnik programowania w języku C#)

Możliwość dostępu do członka w globalnym obszaru nazw jest przydatne, gdy członek może być zakryty przez inny podmiot o tej samej nazwie.

Na przykład w poniższym kodzie Console jest rozpoznawany jako TestApp.Console zamiast do Console należy wpisać w System obszaru nazw.

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

Za pomocą System.Console nadal spowoduje błąd, ponieważ System obszaru nazw jest ukryty przez klasę TestApp.System:

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

Jednak można obejść ten błąd, stosując global::System.Console, podobnie do następującej:

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

Po lewej identyfikator jest global, wyszukiwania dla identyfikatora prawo zaczyna się w globalnej przestrzeni nazw.Na przykład, następująca deklaracja odwołuje się do TestApp jako członka globalnej przestrzeni.

class TestClass : global::TestApp

Oczywiście, tworząc własne przestrzenie nazw o nazwie System nie jest zalecane, i jest mało prawdopodobne, można napotkać ten wystąpił kod.Jednakże w przypadku większych projektów jest bardzo realną możliwość, że powielania nazw może wystąpić w jednym formularzu lub w innym.W takich sytuacjach kwalifikatora globalnego obszaru nazw jest na gwarancji, że można określić obszar nazw katalogu głównego.

Przykład

W tym przykładzie obszaru nazw System jest używana do tej klasy zawierają TestClass w związku z tym, global::System.Console muszą być używane do odniesienia System.Console klasy, która jest ukryty przez System obszaru nazw.Ponadto, alias colAlias jest używana do odwoływania się do obszaru nazw System.Collections; w związku z tym, wystąpienie Hashtable został utworzony za pomocą tego aliasu, zamiast przestrzeni nazw.

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

Zobacz też

Informacje

Przestrzenie nazw (Przewodnik programowania w języku C#)

. — Operator (odwołanie w C#)

Operator :: (odwołanie w C#)

extern (odwołanie w C#)

Koncepcje

Przewodnik programowania w języku C#