Зачем использовать ключевое слово global в C#?
Я хотел бы понять, почему вы можете использовать global::
префикс. В следующем коде ReSharper идентифицирует его как избыточный и может быть удален:
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