Condividi tramite


Procedura: utilizzare il qualificatore di alias dello spazio dei nomi (Guida per programmatori C#)

Aggiornamento: novembre 2007

La possibilità di accedere a un membro dello spazio dei nomi globale risulta utile quando il membro può essere nascosto da un'altra entità con lo stesso nome.

Nell'esempio di codice riportato di seguito Console viene risolto in TestApp.Console anziché nel tipo Console dello spazio dei nomi System.

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

L'utilizzo di System.Console determina un errore in quanto lo spazio dei nomi System è nascosto dalla classe TestApp.System:

// Error  Accesses TestApp.System
System.Console.WriteLine(number);

È tuttavia possibile evitare questo errore utilizzando global::System.Console nel modo seguente:

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

Se l'identificatore di sinistra è global, la ricerca dell'identificatore di destra ha inizio dallo spazio dei nomi globale. La seguente dichiarazione fa ad esempio riferimento a TestApp come membro dello spazio globale.

class TestClass : global::TestApp

Non è ovviamente consigliabile creare spazi dei nomi personali denominati System ed è improbabile che trovare codice che include uno spazio dei nomi con tale nome. Nei progetti di grandi dimensioni è tuttavia molto probabile che si verifichi la duplicazione degli spazi dei nomi in un form o in un altro. In queste situazioni è possibile utilizzare il qualificatore dello spazio dei nomi globale per specificare lo spazio dei nomi di primo livello.

Esempio

Nell'esempio seguente viene utilizzato lo spazio dei nomi System per includere la classe TestClass. Di conseguenza, è necessario utilizzare global::System.Console per fare riferimento alla classe System.Console, nascosta dallo spazio dei nomi System. Viene inoltre utilizzato l'alias colAlias per fare riferimento allo spazio dei nomi System.Collections. Di conseguenza, l'istanza di una System.Collections.Hashtable è stata creata utilizzando questo alias anziché lo spazio dei nomi.

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

Vedere anche

Concetti

Guida per programmatori C#

Riferimenti

Spazi dei nomi (Guida per programmatori C#)

. Operatore . (Riferimenti per C#)

Operatore :: (Riferimenti per C#)

extern (Riferimenti per C#)