Qual è la differenza tra & # 8220; global :: System & # 8221; e & # 8220; Sistema & # 8221; in .NET?
-
03-07-2019 - |
Domanda
Ho appena aggiornato un progetto VS 2005 a VS 2008 e stavo esaminando le modifiche. Ho notato che uno dei file .Designer.cs era cambiato in modo significativo. La maggior parte delle modifiche erano semplicemente sostituzioni di Sistema con globale :: Sistema . Ad esempio,
protected override System.Data.DataTable CreateInstance()
divennero
protected override global::System.Data.DataTable CreateInstance()
Cosa sta succedendo qui?
Soluzione
L'operatore :: è chiamato qualificatore alias dello spazio dei nomi.
global::System.Data.DataTable
è uguale a:
System.Data.DataTable
Visual Studio 2008 lo ha aggiunto al codice generato dal designer per evitare ambiziosi problemi di riferimento che si verificano occasionalmente quando le persone creano classi denominate Sistema ... Ad esempio:
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);
}
}
Tuttavia:
global::System.Console.Writeline("This works");
Per ulteriori letture:
http://msdn.microsoft.com/ it-it / library / c3ay4x3d (VS.80) aspx
Altri suggerimenti
Per impedire alle persone di fare # 1 in questo elenco . :)