Я хотел бы понять, почему вы можете использовать префикс global::
. В следующем коде ReSharper идентифицирует его как избыточный и может быть удален:
Я хотел бы понять, почему вы можете использовать префикс global::
. В следующем коде ReSharper идентифицирует его как избыточный и может быть удален:
Лучше всего использовать префикс глобального пространства имен в сгенерированном коде. Это делается для того, чтобы избежать ситуаций, когда подобный именованный тип существует в вашем пространстве имен.
Если вы создадите тип с именем 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 есть еще несколько примеров (в том числе выше)
"Глобальное контекстуальное ключевое слово, когда оно приходит перед оператором::, ссылается на глобальное пространство имен, которое является пространством имен по умолчанию для любой программы на С# и в противном случае не называется."
Источник: https://msdn.microsoft.com/en-us/library/cc713620.aspx