Зачем использовать ключевое слово global в C#?

Я хотел бы понять, почему вы можете использовать global:: префикс. В следующем коде ReSharper идентифицирует его как избыточный и может быть удален:

alt text

3 ответов


лучше всего использовать префикс глобального пространства имен в сгенерированном коде. Это делается во избежание ситуаций, когда аналогичный именованный тип существует в пространстве имен.

Если вы создаете тип по имени System.Diagnostics.DebuggerNonUserCodeAttribute внутри пространства имен вы заметите, что ReSharper больше не говорит, что global:: не требуется. Генератор кода просто хочет избежать любых столкновений с именами ваших собственных типов.


ключевое слово global:: компилятор связывает имена, начинающиеся в глобальном пространстве имен, а не в текущем контексте. Это необходимо в местах, где связываемый член существует в данном контексте, который имеет то же имя, что и глобальный, и глобальный желателен.

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

на соответствующей странице MSDN есть еще несколько примеров (включая один выше)


" ключевое слово global contextual, когда оно появляется перед оператором::, относится к глобальному пространству имен, которое является пространством имен по умолчанию для любой программы C# и в противном случае не имеет имени."

источник:https://msdn.microsoft.com/en-us/library/cc713620.aspx