Procedura: utilizzare l'alias dello spazio dei nomi globale (Guida per programmatori C#)
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()
{
// The following line causes an error. It accesses TestApp.Console,
// which is a constant.
//Console.WriteLine(number);
}
}
L'utilizzo di System.Console determina un errore in quanto lo spazio dei nomi System è nascosto dalla classe TestApp.System:
// The following line causes an error. It accesses TestApp.System,
// which does not have a Console.WriteLine method.
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)
{
// Searching the global namespace:
global::System.Console.WriteLine(name + " " + test[name]);
}
}
}
}
Vedere anche
Riferimenti
Spazi dei nomi (Guida per programmatori C#)
. Operatore (Riferimenti per C#)
Operatore :: (Riferimenti per C#)