Язык программирования C#9 и платформа .NET5
using MyShapes;using My3DShapes;// Устранить неоднозначность, используя специальный псевдоним.using The3DHexagon = My3DShapes.Hexagon;// На самом деле здесь создается экземпляр класса My3DShapes.Hexagon.The3DHexagon h2 = new The3DHexagon();...Продемонстрированный альтернативный синтаксис
также дает возможность создавать псевдонимы для пространств имен с очень длинными названиями. Одним из пространств имен с самым длинным названием в библиотеках базовых классов являетсяusing, которое содержит член по имениSystem.Runtime.Serialization.Formatters.Binary. При желании экземпляр классаBinaryFormatterможно создать следующим образом:BinaryFormatterusing bfHome = System.Runtime.Serialization.Formatters.Binary;bfHome.BinaryFormatter b = new bfHome.BinaryFormatter();...либо с использованием традиционной директивы
:usingusing System.Runtime.Serialization.Formatters.Binary;BinaryFormatter b = new BinaryFormatter();...На данном этапе не нужно беспокоиться о предназначении класса
(он исследуется в главе 20). Сейчас просто запомните, что ключевое словоBinaryFormatterв C# позволяет создавать псевдонимы для очень длинных полностью заданных имен или, как случается более часто, для разрешения конфликтов имен, которые могут возникать при импорте пространств имен, определяющих типы с идентичными названиями.usingНа заметку! Имейте в виду, что чрезмерное применение псевдонимов C# в результате может привести к получению запутанной кодовой базы. Если другие программисты в команде не знают о ваших специальных псевдонимах, то они могут полагать, что псевдонимы ссылаются на типы из библиотек базовых классов, и прийти в замешательство, не обнаружив их описания в документации.
Создание вложенных пространств имен
При организации типов допускается определять пространства имен внутри других пространств имен. В библиотеках базовых классов подобное встречается во многих местах и обеспечивает размещение типов на более глубоких уровнях. Например, пространство имен
вложено внутрь пространства именIO, давая в итогеSystem.System.IOШаблоны проектов .NET Core помещают начальный код в файле
внутрь пространства имен, название которого совпадает с именем проекта. Такое базовое пространство имен называется корневым. В этом примере корневым пространством имен, созданным шаблоном .NET Core, являетсяProgram.cs:CustomNamespacesnamespace <b>CustomNamespaces</b>{class Program{...}}На заметку! В случае замены комбинации
операторами верхнего уровня назначить им какое-либо пространство имен не удастся.Program/Main()Вложить пространства имен
иMyShapesвнутрь корневого пространства имен можно двумя способами. Первый — просто вложить ключевое словоMy3DShapes, например:namespace<b>namespace CustomNamespaces</b>{<b> namespace MyShapes</b>{// Класс Circlepublic class Circle{/* Интересные методы... */}}}Второй (и более распространенный) способ предусматривает использование "точечной записи" в определении пространства имен, как показано ниже:
namespace <b>CustomNamespaces.MyShapes</b>{// Класс Circlepublic class Circle{/* Интересные методы... */}}Пространства имен не обязаны содержать какие-то типы непосредственно, что позволяет применять их для обеспечения дополнительного уровня области действия.
Учитывая, что теперь пространство
вложено внутрь корневого пространства именMy3DShapes, вам придется обновить все существующие директивыCustomNamespacesи псевдонимы типов (при условии, что вы модифицировали все примеры классов с целью их вложения внутрь корневого пространства имен):usingusing The3DHexagon = CustomNamespaces.My3DShapes.Hexagon;using CustomNamespaces.MyShapes;На заметку! На практике принято группировать файлы в пространстве имен по каталогам. Вообще говоря, расположение файла в рамках структуры каталогов никак не влияет на пространства имен. Однако такой подход делает структуру пространств имен более ясной (и конкретной) для других разработчиков. По этой причине многие разработчики и инструменты анализа кода ожидают соответствия пространств имен структуре каталогов.
Изменение стандартного пространства имен в Visual Studio
Как упоминалось ранее, при создании нового проекта C# с использованием Visual Studio (либо интерфейса .NET Core CLI) название корневого пространства имен приложения будет совпадать с именем проекта. Когда затем в Visual Studio к проекту добавляются новые файлы кода с применением пункта меню Project►Add New Item (Проекта►Добавить новый элемент), типы будут автоматически помещаться внутрь корневого пространства имен. Если вы хотите изменить название корневого пространства имен, тогда откройте окно свойств проекта, перейдите в нем на вкладку Application (Приложение) и введите желаемое имя в поле Default namespace (Стандартное пространство имен), как показано на рис. 16.1.