using MyShapes;
using My3DShapes;
// Устранить неоднозначность, используя специальный псевдоним.
using The3DHexagon = My3DShapes.Hexagon;
// На самом деле здесь создается экземпляр класса My3DShapes.Hexagon.
The3DHexagon h2 = new The3DHexagon();
...
Продемонстрированный альтернативный синтаксис
using
также дает возможность создавать псевдонимы для пространств имен с очень длинными названиями. Одним из пространств имен с самым длинным названием в библиотеках базовых классов является
System.Runtime.Serialization.Formatters.Binary
, которое содержит член по имени
BinaryFormatter
. При желании экземпляр класса
BinaryFormatter
можно создать следующим образом:
using bfHome = System.Runtime.Serialization.Formatters.Binary;
bfHome.BinaryFormatter b = new bfHome.BinaryFormatter();
...
либо с использованием традиционной директивы
using
:
using System.Runtime.Serialization.Formatters.Binary;
BinaryFormatter b = new BinaryFormatter();
...
На данном этапе не нужно беспокоиться о предназначении класса
BinaryFormatter
(он исследуется в главе 20). Сейчас просто запомните, что ключевое слово
using
в C# позволяет создавать псевдонимы для очень длинных полностью заданных имен или, как случается более часто, для разрешения конфликтов имен, которые могут возникать при импорте пространств имен, определяющих типы с идентичными названиями.
На заметку! Имейте в виду, что чрезмерное применение псевдонимов C# в результате может привести к получению запутанной кодовой базы. Если другие программисты в команде не знают о ваших специальных псевдонимах, то они могут полагать, что псевдонимы ссылаются на типы из библиотек базовых классов, и прийти в замешательство, не обнаружив их описания в документации.
Создание вложенных пространств имен
При организации типов допускается определять пространства имен внутри других пространств имен. В библиотеках базовых классов подобное встречается во многих местах и обеспечивает размещение типов на более глубоких уровнях. Например, пространство имен
IO
вложено внутрь пространства имен
System
, давая в итоге
System.IO
.
Шаблоны проектов .NET Core помещают начальный код в файле
Program.cs
внутрь пространства имен, название которого совпадает с именем проекта. Такое базовое пространство имен называется корневым. В этом примере корневым пространством имен, созданным шаблоном .NET Core, является
CustomNamespaces
:
namespace <b>CustomNamespaces</b>
{
class Program
{
...
}
}
На заметку! В случае замены комбинации
Program/Main()
операторами верхнего уровня назначить им какое-либо пространство имен не удастся.
Вложить пространства имен
MyShapes
и
My3DShapes
внутрь корневого пространства имен можно двумя способами. Первый — просто вложить ключевое слово
namespace
, например:
<b>namespace CustomNamespaces</b>
{
<b> namespace MyShapes</b>
{
// Класс Circle
public class Circle
{
/* Интересные методы... */
}
}
}
Второй (и более распространенный) способ предусматривает использование "точечной записи" в определении пространства имен, как показано ниже:
namespace <b>CustomNamespaces.MyShapes</b>
{
// Класс Circle
public class Circle
{
/* Интересные методы... */
}
}
Пространства имен не обязаны содержать какие-то типы непосредственно, что позволяет применять их для обеспечения дополнительного уровня области действия.
Учитывая, что теперь пространство
My3DShapes
вложено внутрь корневого пространства имен
CustomNamespaces
, вам придется обновить все существующие директивы
using
и псевдонимы типов (при условии, что вы модифицировали все примеры классов с целью их вложения внутрь корневого пространства имен):
using 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.