Квалификатор global
Префикс global:: перед именем типа или
пространства указывает поиск с корня всех
пространств имён. Его используют, когда локальное
имя - класс, пространство или псевдоним -
скрывает нужный тип из System или другой
библиотеки. Без global:: компилятор
найдёт ближайшее совпадение в текущей области.
Синтаксис
global::ПолноеИмяТипа
Пример
Давайте объявим класс System и выведем
строку через global::System.Console:
class System
{
}
class Program
{
static void Main()
{
global::System.Console.WriteLine("abcde");
}
}
Результат выполнения кода:
"abcde"
Пример
Без квалификатора обращение System.Console
указало бы на наш класс, а не на пространство:
class System
{
public static void Demo()
{
global::System.Console.WriteLine("local");
}
}
class Program
{
static void Main()
{
System.Demo();
global::System.Console.WriteLine("12345");
}
}
Результат выполнения кода:
"local"
"12345"
Пример
Квалификатор помогает при конфликте имён
во вложенном namespace:
namespace App
{
class Console
{
public static void WriteLine(string text)
{
global::System.Console.WriteLine("app:" + text);
}
}
class Program
{
static void Main()
{
Console.WriteLine("abcde");
}
}
}
Результат выполнения кода:
"app:abcde"
Пример
Псевдоним типа не мешает обратиться к
оригиналу через global:::
using Out = System.Console;
class Program
{
static void Main()
{
Out.WriteLine("a");
global::System.Console.WriteLine("b");
}
}
Результат выполнения кода:
"a"
"b"
Смотрите также
-
пространство имён,
которое задаёт область имён типа -
псевдоним типа,
который может перекрывать длинное имя -
директива
using,
которая подключает пространство в файле -
global using,
которое действует на уровне проекта