2010-08-24 14 views
54

Mi piacerebbe capire perché si potrebbe voler utilizzare il prefisso global::. Nel seguente codice, ReSharper è identificare come ridondante, e in grado di essere rimosso:Perché utilizzare la parola chiave globale in C#?

alt text

+7

@ John, Solo curioso - cercando di imparare perché è utilizzato dal processo di code-gen. –

+4

Paul vuole chiaramente essere un rispondente in SO un giorno. Vai Paul! –

+43

@ John-Saunders Dire a qualcuno di ignorare la loro curiosità è un consiglio orribile. Come ti aspetti esattamente che qualcuno impari? @ Paul-Fryer Penso che questa sia una grande domanda - mi sono spesso chiesto la stessa cosa ma non sono andato in giro a chiedere. – Jake

risposta

50

È preferibile utilizzare il prefisso namespace globale nel codice generato. Questo è fatto per evitare situazioni in cui un tipo con nome simile esiste nel tuo spazio dei nomi.

Se si crea un tipo di nome System.Diagnostics.DebuggerNonUserCodeAttributeall'interno del vostro spazio dei nomi si noterà che ReSharper non dice più che la global:: non è necessaria. Il generatore di codice vuole semplicemente evitare qualsiasi collisione con i nomi dei propri tipi.

+0

Molto utile, grazie. –

+0

Risposta breve, semplice e piacevole – CreativeManix

64

La parola global:: il compilatore di impegnare nomi partire dal namespace globale rispetto al contesto attuale. È necessario nei luoghi in cui un membro associabile esiste in un determinato contesto che ha lo stesso nome di uno globale e quello globale è desiderato.

Ad esempio

class Test { 
    class System {} 
    public void Example() { 
    System.Console.WriteLine("here"); // Error since System binds to Test.System 
    global::System.Console.WriteLine("here"); // Works 
} 

La pagina MSDN corrispondente ha alcuni esempi (compreso quello sopra)

2

"La parola chiave contestuale globale, quando si trova prima dell'operatore ::, fa riferimento allo spazio dei nomi globale, che è lo spazio dei nomi predefinito per qualsiasi programma C# ed è altrimenti senza nome."

Fonte: https://msdn.microsoft.com/en-us/library/cc713620.aspx

+0

Shami Qureshi, se hai intenzione di copiare una risposta parola per parola, devi almeno menzionare la fonte. Sebbene la tua risposta in realtà * non * risponda alla domanda, l'ho modificata per includere l'URL da cui l'hai copiata. – johnnyRose

Problemi correlati