Литмир - Электронная Библиотека
A
A

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 к проекту добавляются новые файлы кода с применением пункта меню ProjectAdd New Item (Проекта►Добавить новый элемент), типы будут автоматически помещаться внутрь корневого пространства имен. Если вы хотите изменить название корневого пространства имен, тогда откройте окно свойств проекта, перейдите в нем на вкладку Application (Приложение) и введите желаемое имя в поле Default namespace (Стандартное пространство имен), как показано на рис. 16.1.

304
{"b":"847442","o":1}