Подтвердить что ты не робот

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

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

alt text

4b9b3361

Ответ 1

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

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

Ответ 2

Ключевое слово 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 есть еще несколько примеров (в том числе выше)

Ответ 3

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

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