Qual è la differenza tra & # 8220; global :: System & # 8221; e & # 8220; Sistema & # 8221; in .NET?

StackOverflow https://stackoverflow.com/questions/162537

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?

È stato utile?

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 . :)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top