Я хотел бы понять, почему вы можете захотеть использовать префикс 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 есть еще несколько примеров (включая приведенный выше)