Глобальные пространства имен


Если мы хотим использовать какое-нибудь пространство имен в файлах кода в проекте, то по умолчанию нам надо его подключать во все файлы, где мы планируем его использовать.

Например, пусть у нас в проекте есть три файла с кодом:

Глобальные пространства имен в C# и .NET
В файле Base.cs определяется класс Company в пространстве Base:

namespace Base;
class Company
{
string title;
public Company(string title) => this.title = title;
public void Print() => Console.WriteLine($"Компания: {title}");
}
В файле Person.cs определен класс Person, который использует класс Company:

using Base;

class Person
{
string name;
Company company;
public Person(string name, Company company)
{
this.name = name;
this.company = company;
}
public void Print()
{
Console.WriteLine($"Имя: {name}");
company.Print();
}
}
Чтобы использовать класс Company мы подключаем его пространство имен: using Base;

В классе Program.cs используются классы Person и Company:

using Base;

Company microsoft = new("Microsoft");
Person tom = new("Tom", microsoft);
tom.Print();
Опять же чтобы использовать класс Company, подключается его пространство имен: using Base;

И таких файлов, где надо подключать пространство Base (или какое-то другое) может быть множество. Это не очень удобно. И в .NET 6 для этого предложена концепция глобальных пространств имен, который подключаются один раз но сразу во все файлы кода в проекте. Для этого нам достаточно в одном файле прописать директиву:

global using подключаемое_пространство_имен;
Например, изменим файл Program.cs следующим образом:

global using Base;

Company microsoft = new("Microsoft");
Person tom = new("Tom", microsoft);
tom.Print();
Теперь пространство Base подключается во все файлы кода в проекте. И из файла Person.cs мы можем убрать строку

using Base;
Определение глобальных пространств в отдельном файле
Однако вышеуказанный подход опять же может быть не очень удобным, поскольку проще определить глобальные пространство имен, которые подключаются во весь проект где-то в одном месте. И для этого в Visual Studio 2022 мы можем добавить в проект новый файл с кодом C# и в нем определить набор подключаемых пространств имен. Например, добавим в проект файл, который назовем GlobalUsings.cs и в котором определим следующее содержимое:

global using System.Text;
global using System.Reflection;
global using Base;
И этот набор пространств имен будет автоматически подключаться во все файлы кода в проекте.

Файл GlobalUsings.cs и глобальные пространства имен в C# и .NET и в Visual Studio 2022