Что означает global :: в файлах дизайнера .Net? - PullRequest
7 голосов
/ 10 июля 2009

Вот вопрос, который у меня был в течение некоторого времени, но так и не удосужился спросить ...

Во многих файлах дизайнеров, которые Visual Studio генерирует, некоторые переменные имеют префикс global: Может кто-нибудь объяснить, что это значит, что делает этот префикс и где его использовать?

Ответы [ 4 ]

12 голосов
/ 10 июля 2009

Глобальный квалификатор пространства имен позволяет получить доступ к члену в глобальном («пустом») пространстве имен.

Если вы вызываете неквалифицированный тип (например, MyClass.DoSomething (), а не MyNamespace.MyClass.DoSomething ()), то предполагается, что он находится в текущем пространстве имен. Как тогда вы квалифицируете тип, чтобы сказать, что он находится в глобальном / пустом пространстве имен?

Этот пример кода (консольное приложение) должен иллюстрировать его поведение:

using System;

namespace MyNamespace
{
    public class Program
    {
        static void Main(string[] args)
        {
            MessageWriter.Write();          // writes "MyNamespace namespace"
            global::MessageWriter.Write();  // writes "Global namespace"
            Console.ReadLine();
        }
    }

    // This class is in the namespace "MyNamespace"
    public class MessageWriter
    {
        public static void Write()
        {
            Console.WriteLine("MyNamespace namespace");
        }
    }
}

// This class is in the global namespace (i.e. no specified namespace)
public class MessageWriter
{
    public static void Write()
    {
        Console.WriteLine("Global namespace");
    }
}
4 голосов
/ 10 июля 2009

Префикс указывает глобальное пространство имен. Вот пример:

namespace Bar {
  class Gnat { }
}
namespace Foo {
  namespace Bar {
    class Gnat { }
  }
  class Gnus {
    Bar.Gnat a; // Foo.Bar.Gnat
    global::Bar.Gnat b; // Bar.Gnat
  }
}

Обратите внимание, как член, возможно, непреднамеренно ссылается на класс Foo.Bar.Gnat. Чтобы избежать этого, используйте префикс global ::.

3 голосов
/ 10 июля 2009

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

1 голос
/ 10 июля 2009

С здесь

Когда левый идентификатор является глобальным, поиск правильного идентификатора начинается в глобальном пространстве имен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...