2010-08-24 15 views
54

Chciałbym zrozumieć, dlaczego warto użyć prefiksu global::. W poniższym kodzie ReSharper jest określenie go jako zbędny i może zostać usunięta:Dlaczego warto używać słowa kluczowego globalnego w języku C#?

alt text

+7

@John, po prostu ciekawy - próbuje dowiedzieć się, dlaczego jest on wykorzystywany w procesie kodu gen. –

+4

Paul wyraźnie chce być odpo- wiedzialnym w SO pewnego dnia. Idź Paul! –

+43

@ John-Saunders Powiedzenie komuś, że zignoruje ich ciekawość, jest okropną radą. Jak dokładnie można oczekiwać, że ktokolwiek się nauczy? @ Paul-Fryer Myślę, że to świetne pytanie - często zastanawiałem się nad tym samym, ale nie zadawałem sobie pytania. – Jake

Odpowiedz

50

najlepiej jest skorzystać z globalnej przestrzeni nazw prefiks w wygenerowanym kodzie. Ma to na celu uniknięcie sytuacji, w których podobny nazwany typ istnieje w twojej przestrzeni nazw.

Jeśli utworzyć typ nazwie System.Diagnostics.DebuggerNonUserCodeAttributewewnątrz przestrzeni nazw można zauważyć, że ReSharper już nie mówi, że global:: nie jest potrzebne. Generator kodu po prostu chce uniknąć kolizji z nazwami własnych typów.

+0

Bardzo pomocna, dziękuję. –

+0

Krótka, prosta i miła odpowiedź – CreativeManix

64

słowa kluczowego global:: powoduje kompilator powiązać nazwy rozpoczynające się w globalnej przestrzeni nazw, a nie w obecnym kontekście. Jest potrzebny w miejscach, w których wiążący członek istnieje w danym kontekście, który ma taką samą nazwę jak globalny, a globalny jest pożądany.

Na przykład

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

odpowiedniej strony MSDN ma jeszcze kilka przykładów (w tym jeden powyżej)

2

„Globalny kluczowe kontekstowa, jeśli chodzi przed :: operator, odnosi się do globalnej przestrzeni nazw, która jest domyślna przestrzeń nazw dla każdego programu C# i jest inaczej bezimienny”.

Źródło: https://msdn.microsoft.com/en-us/library/cc713620.aspx

+0

Shami Qureshi, jeśli zamierzasz skopiować słowo w słowo, musisz przynajmniej wspomnieć o źródle. Chociaż twoja odpowiedź naprawdę * nie * odpowiada na pytanie, zmieniłem ją tak, aby zawierała adres URL, z którego go skopiowałeś. – johnnyRose

Powiązane problemy