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

Такая концепция удобна и практична. Некоторые создают универсальные библиотеки, которые будут пригодны для самых разных проектов. Здесь начинают фигурировать пространства имен. Далее предстоит разобрать их более подробно.

Определение

Пространство имен (namespaces) – группа взаимосвязанных функций, констант, переменных, объектов, а также иных компонентов программы. Набор знаков (имен), используемых для идентификации или ссылки на объекты тех или иных видов. Пространство выступает гарантом того, что все из заданного массива объектов обладают уникальными именами. Это помогает идентифицировать их в случае необходимости.

В C# классы и иные типы .NET не существуют сами по себе – их помещают в специальные контейнеры – пространства имен. С их помощью удается грамотно организовать код по логическим блокам. Пространства имен дают возможность объединения и отделения некоторой функциональности, связанной с общей идеей или решением той или иной задачи, от остальной части кода.

Name space поддерживают работу с:

  • классами;
  • интерфейсами;
  • иными компонентами исходного программного кода.

С их помощью код становится более понятным и читабельным, разработка становится в несколько раз быстрее. Пространства имен используются преимущественно для классовой организации. Они дают возможность контроля области применения методов в более масштабных проектах.

Форма представления

Существуют различные пространства имен. Они определяются при помощи ключевого слова namespace. Задать соответствующий компонент для кода можно, пользуясь следующей формой:

Пространства namespace C# и C++

За счет такого подхода удается сохранять одни наборы имен отличными от других. Данная концепция позволит устранить конфликты одинаковых имен классов между пространствами.

Членами здесь смогут выступить:

  • делегаты;
  • структуры;
  • пространство имен.

Namespace может всегда характеризоваться в качестве группы классов с общими признаками.

Свойства namespace

Именные пространства обладают такими свойствами:

  • разделение через оператор «.» (точку);
  • организация крупных и сложных проектов при разработке программного обеспечения;
  • global – это глобальное пространство имен.

Огромным спросом в рассматриваемом вопросе пользуется директива using. О ней будет рассказано более подробно позже. Сначала предстоит поближе изучить пространство имен с СИ-семействе.

Создание в C# – пример

В C# можно определить собственное namespace. Пример – в файле program.cs будет создано пространство под названием Base. Выглядит это так:

Пространства namespace C# и C++

В примере, указанном выше, пространство имен имеет класс Person. В ней содержится одна переменная – name, а также конструктор и метод Print.

Пространства namespace C# и C++

Далее можно попытаться воспользоваться классом Person:

Пространства namespace C# и C++

В первой строке приведенного кода появится ошибка. Связано это с тем, что Visual Studio не сможет обнаружить класс Person. Для обращения к нему потребуется использовать полное имя этого класса. Во внимание обязательно принимаются имеющиеся пространства имен:

Пространства namespace C# и C++

Соответствующий компонент расположен в пространстве Base. Его полным именем будет выступать Base.Person. С его помощью получится обратиться к Person вне его namespace name.

Подключение

Полное имя класса с учетом именного пространства будет делать код избыточным. Особенно тогда, когда оно включает в себя огромное количество classes, которые хочется использовать в процессе написания приложения.

Чтобы не писать полное имя класса, допускается подключение пространства имен. Для данной задачи будет применять директива using:

Пространства namespace C# и C++
Пространства namespace C# и C++

Далее using namespace std будет рассмотрена более подробно. Это очень важный компонент, без которого невозможно создавать читабельные крупные проекты.

Вложенные пространства

Существуют так называемые вложенные пространства имен в C# и С++. Это когда одни пространства включат в себя другие.

Пространства namespace C# и C++

Здесь:

  1. Person и Company расположены в разных namespaces.
  2. Чтобы в классе Person можно было использовать класс Company, потребуется указать его name с учетом namespace: Organisation.Types.Company.
  3. Base можно не указывать. Связано это с тем, что оба класса в конечном итоге находятся в едином пространстве.
  4. В качестве альтернативы разрешается подключение пространства имен класса Company через директиву using.

Обратиться к соответствующим классам вне пространства Base получится, если использовать всю именную цепочку:

Пространства namespace C# и C++

Выше – наглядный пример того, как это выглядит на практике.

Файлы заголовков

После версии .NET 6 и C# 10 появилась возможность определения пространства имен на уровне файлов. Для этого в проект в качестве примера рекомендуется добавить новый документ. Он будет включать в себя код C#:

  1. Запустить Visual Studio и открыть тот или иной проект.
  2. Нажать на название рабочего документа правой кнопкой мыши.
  3. Выбрать в появившемся навигационном меню Add-New Item.
  4. Кликнуть по Class и поле Name. В качестве имени выступит Base.cs.
  5. В проекте появится новый документ с указанным ранее именем. Из него потребуется удалить все записи.
  6. Вставить код: Пространства namespace C# и C++.

Директива namespace с name Base в самом начале документа указывает на то, что содержимое файла включает в себя именное пространство Base. Больше эта запись ни на что не ссылается.

Пространства namespace C# и C++

Остается подключить пространство имен непосредственно в Program.cs. Выше – пример кода, который поможет сделать это корректно.

В C++

В C++ тоже можно создать файл заголовков. Он может быть перенесен в будущем в другие приложения для более быстрой разработки.

В качестве пространства имен будет использоваться такой код:

Пространства namespace C# и C++

Здесь в группу namespace объединены несколько names. С помощью этого приема удается избежать именных конфликтов. Он пригодится, когда в какой-то из подключенных библиотек уже имеется функция. Пример – sum. По именной области программа поймет, что именно из namespace из одинаковых name необходима разработчику.

Для сокращения исходного кода может пригодиться директива Using. В данном случае фрагмент будет выглядеть так:

Пространства namespace C# и C++

Команда указывает на то, что пользователю потребуются name из namespace с именами std и mynames.

После using допускается указание отдельной функции или переменной. Всю область пространства имен можно не прописывать:

Пространства namespace C# и C++

Выше – наглядный пример того, как это сделать. В данном фрагменте из пространства имен подключается только функция sum().

Заголовки в C++ – пример

Ранее указанный фрагмент кода можно перенести в отдельный документ. Этот прием помогает подключать пространства имен к разным приложениям, избегая дополнительного кода в основном файле.

Потребуется создать файл заголовков. Выглядит программный код так:

Пространства namespace C# и C++

Рекомендуется сохранить его с расширением .h. Пример – в документе mylib.h. В предложенном примере отсутствует функция main(). Это связано с тем, что предложенный код не является самостоятельным приложением. В точке входа здесь нет никакого смысла. Iostream тоже не подключается – ничего выводить при помощи блока кода не нужно. В заголовок для работы с пространствами имен можно добавлять совершенно разные файлы:

Пространства namespace C# и C++

Далее необходимо разместить mylib.h в папке, где расположено «ключевое» приложение и добавить команду:

Пространства namespace C# и C++

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

Теперь пользователи смогут активировать все возможности имеющегося naming space в приложении:

Пространства namespace C# и C++

А вот результат обработки кода:

Пространства namespace C# и C++

Если необходимо использовать математические функции (pow и другие), потребуется подключение к библиотеке cmath.

Области видимости

Пространство имен – это область видимости. Оно может быть глобальным и локальным. В первом случае предстоит работать с глобальной именной областью. Вот пример приложения:

Пространства namespace C# и C++

При попытке компиляции на экране появится ошибка. Связано это с тем, что глобальная область видимости не принимает более одной переменной с одним и тем же именем. Из-за этого внедряются «локальные» или «пользовательские» варианты.

Любая именная область должны быть объявлена в блоке. Соответствующий фрагмент кода выступает первой частью всех возможных распределенных областей пространства.

Объекты, объявленные в теле именной области – это его члены. Name в namespace – имена членов. Они будут введены объявлениями в декларативную именную область.

Стандартная область имен C++

В C++ имеется библиотека, называемая стандартной. В ней находятся названия:

  • объектов;
  • функций;
  • иных сущностей языка.

Name здесь взяты из namespace std. Стандартная библиотека включает в себя подбиблиотеки. Наиболее популярная из них – iostream. Она поддерживает объект named cout. Он применяется для того, чтобы отправлять на консоль или терминал результаты обработки кода.

Чтобы воспользоваться стандартной библиотекой в C++, потребуется указать в начале кода такую запись:

Пространства namespace C# и C++

Рекомендуется обратить внимание на применение директивы using и std. Include – это директива препроцессора. Она не должна заканчиваться точкой с запятой. Поддерживает в своем составе файл iostream в позиции своей директивы.

Несколько слов о using

Директива using – средство импорта именных областей. Избавляет программиста от полной классификации стереотипных названий. Позволяет использовать определенные типы. Указывать полное пространство не придется. В базовой форме using происходит импорт всех типов именных областей.

Имеет поддержку нескольких модификаторов:

  1. Global. Работает так, как и при добавлении директивы use к каждому исходному документу в проекте.
  2. Static. Импортирует компоненты static, а также вложенные типы из одного выбранного, а не из всего пространства имен.

Пишется using в самом начале корда – до пространственных имен. В противном случае возникнет ошибка компиляции.

Здесь можно увидеть больше информации о рассмотренной теме. Чтобы быстрее разобраться с int main и иными вопросами именных областей, рекомендуется закончить специализированные дистанционные компьютерные онлайн курсы.

Пространства namespace C# и C++