0 added
0 removed
Original
2026-01-01
Modified
2026-03-10
1
<ul><li><a>Определение</a></li>
1
<ul><li><a>Определение</a></li>
2
<li><a>Форма представления</a><ul><li><a>Свойства namespace</a></li>
2
<li><a>Форма представления</a><ul><li><a>Свойства namespace</a></li>
3
<li><a>Создание в C# - пример</a></li>
3
<li><a>Создание в C# - пример</a></li>
4
</ul></li>
4
</ul></li>
5
<li><a>Подключение</a></li>
5
<li><a>Подключение</a></li>
6
<li><a>Вложенные пространства</a></li>
6
<li><a>Вложенные пространства</a></li>
7
<li><a>Файлы заголовков</a><ul><li><a>В C++</a><ul><li><a>Заголовки в C++ - пример</a></li>
7
<li><a>Файлы заголовков</a><ul><li><a>В C++</a><ul><li><a>Заголовки в C++ - пример</a></li>
8
</ul></li>
8
</ul></li>
9
</ul></li>
9
</ul></li>
10
<li><a>Области видимости</a></li>
10
<li><a>Области видимости</a></li>
11
<li><a>Стандартная область имен C++</a></li>
11
<li><a>Стандартная область имен C++</a></li>
12
<li><a>Несколько слов о using</a></li>
12
<li><a>Несколько слов о using</a></li>
13
</ul><p>Во время разработки программного обеспечения иногда удается воспользоваться функциями, которые ранее были написаны другими программистами. Такие операции формируются в специальные библиотеки. Если она будет входить в состав языка или располагаться в открытом доступе, удастся задействовать все ее возможности.</p>
13
</ul><p>Во время разработки программного обеспечения иногда удается воспользоваться функциями, которые ранее были написаны другими программистами. Такие операции формируются в специальные библиотеки. Если она будет входить в состав языка или располагаться в открытом доступе, удастся задействовать все ее возможности.</p>
14
<p>Такая концепция удобна и практична. Некоторые создают универсальные библиотеки, которые будут пригодны для самых разных проектов. Здесь начинают фигурировать пространства имен. Далее предстоит разобрать их более подробно.</p>
14
<p>Такая концепция удобна и практична. Некоторые создают универсальные библиотеки, которые будут пригодны для самых разных проектов. Здесь начинают фигурировать пространства имен. Далее предстоит разобрать их более подробно.</p>
15
<h2>Определение</h2>
15
<h2>Определение</h2>
16
<p>Пространство имен (namespaces) - группа взаимосвязанных функций, констант, переменных, объектов, а также иных компонентов программы. Набор знаков (имен), используемых для идентификации или ссылки на объекты тех или иных видов. Пространство выступает гарантом того, что все из заданного массива объектов обладают уникальными именами. Это помогает идентифицировать их в случае необходимости.</p>
16
<p>Пространство имен (namespaces) - группа взаимосвязанных функций, констант, переменных, объектов, а также иных компонентов программы. Набор знаков (имен), используемых для идентификации или ссылки на объекты тех или иных видов. Пространство выступает гарантом того, что все из заданного массива объектов обладают уникальными именами. Это помогает идентифицировать их в случае необходимости.</p>
17
<p>В C# классы и иные типы .NET не существуют сами по себе - их помещают в специальные контейнеры - пространства имен. С их помощью удается грамотно организовать код по логическим блокам. Пространства имен дают возможность объединения и отделения некоторой функциональности, связанной с общей идеей или решением той или иной задачи, от остальной части кода.</p>
17
<p>В C# классы и иные типы .NET не существуют сами по себе - их помещают в специальные контейнеры - пространства имен. С их помощью удается грамотно организовать код по логическим блокам. Пространства имен дают возможность объединения и отделения некоторой функциональности, связанной с общей идеей или решением той или иной задачи, от остальной части кода.</p>
18
<p>Name space поддерживают работу с:</p>
18
<p>Name space поддерживают работу с:</p>
19
<ul><li>классами;</li>
19
<ul><li>классами;</li>
20
<li>интерфейсами;</li>
20
<li>интерфейсами;</li>
21
<li>иными компонентами исходного программного кода.</li>
21
<li>иными компонентами исходного программного кода.</li>
22
</ul><p>С их помощью код становится более понятным и читабельным, разработка становится в несколько раз быстрее. Пространства имен используются преимущественно для классовой организации. Они дают возможность контроля области применения методов в более масштабных проектах.</p>
22
</ul><p>С их помощью код становится более понятным и читабельным, разработка становится в несколько раз быстрее. Пространства имен используются преимущественно для классовой организации. Они дают возможность контроля области применения методов в более масштабных проектах.</p>
23
<h2>Форма представления</h2>
23
<h2>Форма представления</h2>
24
<p>Существуют различные пространства имен. Они определяются при помощи ключевого слова namespace. Задать соответствующий компонент для кода можно, пользуясь следующей формой:</p>
24
<p>Существуют различные пространства имен. Они определяются при помощи ключевого слова namespace. Задать соответствующий компонент для кода можно, пользуясь следующей формой:</p>
25
<p>За счет такого подхода удается сохранять одни наборы имен отличными от других. Данная концепция позволит устранить конфликты одинаковых имен классов между пространствами.</p>
25
<p>За счет такого подхода удается сохранять одни наборы имен отличными от других. Данная концепция позволит устранить конфликты одинаковых имен классов между пространствами.</p>
26
<p>Членами здесь смогут выступить:</p>
26
<p>Членами здесь смогут выступить:</p>
27
<ul><li>делегаты;</li>
27
<ul><li>делегаты;</li>
28
<li>структуры;</li>
28
<li>структуры;</li>
29
<li>пространство имен.</li>
29
<li>пространство имен.</li>
30
</ul><p>Namespace может всегда характеризоваться в качестве группы классов с общими признаками.</p>
30
</ul><p>Namespace может всегда характеризоваться в качестве группы классов с общими признаками.</p>
31
<h3>Свойства namespace</h3>
31
<h3>Свойства namespace</h3>
32
<p>Именные пространства обладают такими свойствами:</p>
32
<p>Именные пространства обладают такими свойствами:</p>
33
<ul><li>разделение через оператор "." (точку);</li>
33
<ul><li>разделение через оператор "." (точку);</li>
34
<li>организация крупных и сложных проектов при разработке программного обеспечения;</li>
34
<li>организация крупных и сложных проектов при разработке программного обеспечения;</li>
35
<li>global - это глобальное пространство имен.</li>
35
<li>global - это глобальное пространство имен.</li>
36
</ul><p>Огромным спросом в рассматриваемом вопросе пользуется директива using. О ней будет рассказано более подробно позже. Сначала предстоит поближе изучить пространство имен с СИ-семействе.</p>
36
</ul><p>Огромным спросом в рассматриваемом вопросе пользуется директива using. О ней будет рассказано более подробно позже. Сначала предстоит поближе изучить пространство имен с СИ-семействе.</p>
37
<h3>Создание в C# - пример</h3>
37
<h3>Создание в C# - пример</h3>
38
<p>В C# можно определить собственное namespace. Пример - в файле program.cs будет создано пространство под названием Base. Выглядит это так:</p>
38
<p>В C# можно определить собственное namespace. Пример - в файле program.cs будет создано пространство под названием Base. Выглядит это так:</p>
39
<p>В примере, указанном выше, пространство имен имеет класс Person. В ней содержится одна переменная - name, а также конструктор и метод Print.</p>
39
<p>В примере, указанном выше, пространство имен имеет класс Person. В ней содержится одна переменная - name, а также конструктор и метод Print.</p>
40
<p>Далее можно попытаться воспользоваться классом Person:</p>
40
<p>Далее можно попытаться воспользоваться классом Person:</p>
41
<p>В первой строке приведенного кода появится ошибка. Связано это с тем, что Visual Studio не сможет обнаружить класс Person. Для обращения к нему потребуется использовать полное имя этого класса. Во внимание обязательно принимаются имеющиеся пространства имен:</p>
41
<p>В первой строке приведенного кода появится ошибка. Связано это с тем, что Visual Studio не сможет обнаружить класс Person. Для обращения к нему потребуется использовать полное имя этого класса. Во внимание обязательно принимаются имеющиеся пространства имен:</p>
42
<p>Соответствующий компонент расположен в пространстве Base. Его полным именем будет выступать Base.Person. С его помощью получится обратиться к Person вне его namespace name.</p>
42
<p>Соответствующий компонент расположен в пространстве Base. Его полным именем будет выступать Base.Person. С его помощью получится обратиться к Person вне его namespace name.</p>
43
<h2>Подключение</h2>
43
<h2>Подключение</h2>
44
<p>Полное имя класса с учетом именного пространства будет делать код избыточным. Особенно тогда, когда оно включает в себя огромное количество classes, которые хочется использовать в процессе написания приложения.</p>
44
<p>Полное имя класса с учетом именного пространства будет делать код избыточным. Особенно тогда, когда оно включает в себя огромное количество classes, которые хочется использовать в процессе написания приложения.</p>
45
<p>Чтобы не писать полное имя класса, допускается подключение пространства имен. Для данной задачи будет применять директива using:</p>
45
<p>Чтобы не писать полное имя класса, допускается подключение пространства имен. Для данной задачи будет применять директива using:</p>
46
<p>Далее using namespace std будет рассмотрена более подробно. Это очень важный компонент, без которого невозможно создавать читабельные крупные проекты.</p>
46
<p>Далее using namespace std будет рассмотрена более подробно. Это очень важный компонент, без которого невозможно создавать читабельные крупные проекты.</p>
47
<h2>Вложенные пространства</h2>
47
<h2>Вложенные пространства</h2>
48
<p>Существуют так называемые вложенные пространства имен в C# и С++. Это когда одни пространства включат в себя другие.</p>
48
<p>Существуют так называемые вложенные пространства имен в C# и С++. Это когда одни пространства включат в себя другие.</p>
49
<p>Здесь:</p>
49
<p>Здесь:</p>
50
<ol><li>Person и Company расположены в разных namespaces.</li>
50
<ol><li>Person и Company расположены в разных namespaces.</li>
51
<li>Чтобы в классе Person можно было использовать класс Company, потребуется указать его name с учетом namespace: Organisation.Types.Company.</li>
51
<li>Чтобы в классе Person можно было использовать класс Company, потребуется указать его name с учетом namespace: Organisation.Types.Company.</li>
52
<li>Base можно не указывать. Связано это с тем, что оба класса в конечном итоге находятся в едином пространстве.</li>
52
<li>Base можно не указывать. Связано это с тем, что оба класса в конечном итоге находятся в едином пространстве.</li>
53
<li>В качестве альтернативы разрешается подключение пространства имен класса Company через директиву using.</li>
53
<li>В качестве альтернативы разрешается подключение пространства имен класса Company через директиву using.</li>
54
</ol><p>Обратиться к соответствующим классам вне пространства Base получится, если использовать всю именную цепочку:</p>
54
</ol><p>Обратиться к соответствующим классам вне пространства Base получится, если использовать всю именную цепочку:</p>
55
<p>Выше - наглядный пример того, как это выглядит на практике.</p>
55
<p>Выше - наглядный пример того, как это выглядит на практике.</p>
56
<h2>Файлы заголовков</h2>
56
<h2>Файлы заголовков</h2>
57
<p>После версии .NET 6 и C# 10 появилась возможность определения пространства имен на уровне файлов. Для этого в проект в качестве примера рекомендуется добавить новый документ. Он будет включать в себя код C#:</p>
57
<p>После версии .NET 6 и C# 10 появилась возможность определения пространства имен на уровне файлов. Для этого в проект в качестве примера рекомендуется добавить новый документ. Он будет включать в себя код C#:</p>
58
<ol><li>Запустить Visual Studio и открыть тот или иной проект.</li>
58
<ol><li>Запустить Visual Studio и открыть тот или иной проект.</li>
59
<li>Нажать на название рабочего документа правой кнопкой мыши.</li>
59
<li>Нажать на название рабочего документа правой кнопкой мыши.</li>
60
<li>Выбрать в появившемся навигационном меню Add-New Item.</li>
60
<li>Выбрать в появившемся навигационном меню Add-New Item.</li>
61
<li>Кликнуть по Class и поле Name. В качестве имени выступит Base.cs.</li>
61
<li>Кликнуть по Class и поле Name. В качестве имени выступит Base.cs.</li>
62
<li>В проекте появится новый документ с указанным ранее именем. Из него потребуется удалить все записи.</li>
62
<li>В проекте появится новый документ с указанным ранее именем. Из него потребуется удалить все записи.</li>
63
<li>Вставить код: .</li>
63
<li>Вставить код: .</li>
64
</ol><p>Директива namespace с name Base в самом начале документа указывает на то, что содержимое файла включает в себя именное пространство Base. Больше эта запись ни на что не ссылается.</p>
64
</ol><p>Директива namespace с name Base в самом начале документа указывает на то, что содержимое файла включает в себя именное пространство Base. Больше эта запись ни на что не ссылается.</p>
65
<p>Остается подключить пространство имен непосредственно в Program.cs. Выше - пример кода, который поможет сделать это корректно.</p>
65
<p>Остается подключить пространство имен непосредственно в Program.cs. Выше - пример кода, который поможет сделать это корректно.</p>
66
<h3>В C++</h3>
66
<h3>В C++</h3>
67
<p>В C++ тоже можно создать файл заголовков. Он может быть перенесен в будущем в другие приложения для более быстрой разработки.</p>
67
<p>В C++ тоже можно создать файл заголовков. Он может быть перенесен в будущем в другие приложения для более быстрой разработки.</p>
68
<p>В качестве пространства имен будет использоваться такой код:</p>
68
<p>В качестве пространства имен будет использоваться такой код:</p>
69
<p>Здесь в группу namespace объединены несколько names. С помощью этого приема удается избежать именных конфликтов. Он пригодится, когда в какой-то из подключенных библиотек уже имеется функция. Пример - sum. По именной области программа поймет, что именно из namespace из одинаковых name необходима разработчику.</p>
69
<p>Здесь в группу namespace объединены несколько names. С помощью этого приема удается избежать именных конфликтов. Он пригодится, когда в какой-то из подключенных библиотек уже имеется функция. Пример - sum. По именной области программа поймет, что именно из namespace из одинаковых name необходима разработчику.</p>
70
<p>Для сокращения исходного кода может пригодиться директива Using. В данном случае фрагмент будет выглядеть так:</p>
70
<p>Для сокращения исходного кода может пригодиться директива Using. В данном случае фрагмент будет выглядеть так:</p>
71
<p>Команда указывает на то, что пользователю потребуются name из namespace с именами std и mynames.</p>
71
<p>Команда указывает на то, что пользователю потребуются name из namespace с именами std и mynames.</p>
72
<p>После using допускается указание отдельной функции или переменной. Всю область пространства имен можно не прописывать:</p>
72
<p>После using допускается указание отдельной функции или переменной. Всю область пространства имен можно не прописывать:</p>
73
<p>Выше - наглядный пример того, как это сделать. В данном фрагменте из пространства имен подключается только функция sum().</p>
73
<p>Выше - наглядный пример того, как это сделать. В данном фрагменте из пространства имен подключается только функция sum().</p>
74
<h4><em>Заголовки в C++ - пример</em></h4>
74
<h4><em>Заголовки в C++ - пример</em></h4>
75
<p>Ранее указанный фрагмент кода можно перенести в отдельный документ. Этот прием помогает подключать пространства имен к разным приложениям, избегая дополнительного кода в основном файле.</p>
75
<p>Ранее указанный фрагмент кода можно перенести в отдельный документ. Этот прием помогает подключать пространства имен к разным приложениям, избегая дополнительного кода в основном файле.</p>
76
<p>Потребуется создать файл заголовков. Выглядит программный код так:</p>
76
<p>Потребуется создать файл заголовков. Выглядит программный код так:</p>
77
<p>Рекомендуется сохранить его с расширением .h. Пример - в документе mylib.h. В предложенном примере отсутствует функция main(). Это связано с тем, что предложенный код не является самостоятельным приложением. В точке входа здесь нет никакого смысла. Iostream тоже не подключается - ничего выводить при помощи блока кода не нужно. В заголовок для работы с пространствами имен можно добавлять совершенно разные файлы:</p>
77
<p>Рекомендуется сохранить его с расширением .h. Пример - в документе mylib.h. В предложенном примере отсутствует функция main(). Это связано с тем, что предложенный код не является самостоятельным приложением. В точке входа здесь нет никакого смысла. Iostream тоже не подключается - ничего выводить при помощи блока кода не нужно. В заголовок для работы с пространствами имен можно добавлять совершенно разные файлы:</p>
78
<p>Далее необходимо разместить mylib.h в папке, где расположено "ключевое" приложение и добавить команду:</p>
78
<p>Далее необходимо разместить mylib.h в папке, где расположено "ключевое" приложение и добавить команду:</p>
79
<p>Стоит обратить внимание на то, что при записи пространства имен используются двойные кавычки. Они нужны для локальных заголовков. Если необходимо использовать системные, придется поставить угловые скобки.</p>
79
<p>Стоит обратить внимание на то, что при записи пространства имен используются двойные кавычки. Они нужны для локальных заголовков. Если необходимо использовать системные, придется поставить угловые скобки.</p>
80
<p>Теперь пользователи смогут активировать все возможности имеющегося naming space в приложении:</p>
80
<p>Теперь пользователи смогут активировать все возможности имеющегося naming space в приложении:</p>
81
<p>А вот результат обработки кода:</p>
81
<p>А вот результат обработки кода:</p>
82
<p>Если необходимо использовать математические функции (pow и другие), потребуется подключение к библиотеке cmath.</p>
82
<p>Если необходимо использовать математические функции (pow и другие), потребуется подключение к библиотеке cmath.</p>
83
<h2>Области видимости</h2>
83
<h2>Области видимости</h2>
84
<p>Пространство имен - это область видимости. Оно может быть глобальным и локальным. В первом случае предстоит работать с глобальной именной областью. Вот пример приложения:</p>
84
<p>Пространство имен - это область видимости. Оно может быть глобальным и локальным. В первом случае предстоит работать с глобальной именной областью. Вот пример приложения:</p>
85
<p>При попытке компиляции на экране появится ошибка. Связано это с тем, что глобальная область видимости не принимает более одной переменной с одним и тем же именем. Из-за этого внедряются "локальные" или "пользовательские" варианты.</p>
85
<p>При попытке компиляции на экране появится ошибка. Связано это с тем, что глобальная область видимости не принимает более одной переменной с одним и тем же именем. Из-за этого внедряются "локальные" или "пользовательские" варианты.</p>
86
<p>Любая именная область должны быть объявлена в блоке. Соответствующий фрагмент кода выступает первой частью всех возможных распределенных областей пространства.</p>
86
<p>Любая именная область должны быть объявлена в блоке. Соответствующий фрагмент кода выступает первой частью всех возможных распределенных областей пространства.</p>
87
<p>Объекты, объявленные в теле именной области - это его члены. Name в namespace - имена членов. Они будут введены объявлениями в декларативную именную область.</p>
87
<p>Объекты, объявленные в теле именной области - это его члены. Name в namespace - имена членов. Они будут введены объявлениями в декларативную именную область.</p>
88
<p>В C++ имеется библиотека, называемая стандартной. В ней находятся названия:</p>
88
<p>В C++ имеется библиотека, называемая стандартной. В ней находятся названия:</p>
89
<ul><li>объектов;</li>
89
<ul><li>объектов;</li>
90
<li>функций;</li>
90
<li>функций;</li>
91
<li>иных сущностей языка.</li>
91
<li>иных сущностей языка.</li>
92
</ul><p>Name здесь взяты из namespace std. Стандартная библиотека включает в себя подбиблиотеки. Наиболее популярная из них - iostream. Она поддерживает объект named cout. Он применяется для того, чтобы отправлять на консоль или терминал результаты обработки кода.</p>
92
</ul><p>Name здесь взяты из namespace std. Стандартная библиотека включает в себя подбиблиотеки. Наиболее популярная из них - iostream. Она поддерживает объект named cout. Он применяется для того, чтобы отправлять на консоль или терминал результаты обработки кода.</p>
93
<p>Чтобы воспользоваться стандартной библиотекой в C++, потребуется указать в начале кода такую запись:</p>
93
<p>Чтобы воспользоваться стандартной библиотекой в C++, потребуется указать в начале кода такую запись:</p>
94
<p>Рекомендуется обратить внимание на применение директивы using и std. Include - это директива препроцессора. Она не должна заканчиваться точкой с запятой. Поддерживает в своем составе файл iostream в позиции своей директивы.</p>
94
<p>Рекомендуется обратить внимание на применение директивы using и std. Include - это директива препроцессора. Она не должна заканчиваться точкой с запятой. Поддерживает в своем составе файл iostream в позиции своей директивы.</p>
95
<h2>Несколько слов о using</h2>
95
<h2>Несколько слов о using</h2>
96
<p>Директива using - средство импорта именных областей. Избавляет программиста от полной классификации стереотипных названий. Позволяет использовать определенные типы. Указывать полное пространство не придется. В базовой форме using происходит импорт всех типов именных областей.</p>
96
<p>Директива using - средство импорта именных областей. Избавляет программиста от полной классификации стереотипных названий. Позволяет использовать определенные типы. Указывать полное пространство не придется. В базовой форме using происходит импорт всех типов именных областей.</p>
97
<p>Имеет поддержку нескольких модификаторов:</p>
97
<p>Имеет поддержку нескольких модификаторов:</p>
98
<ol><li>Global. Работает так, как и при добавлении директивы use к каждому исходному документу в проекте.</li>
98
<ol><li>Global. Работает так, как и при добавлении директивы use к каждому исходному документу в проекте.</li>
99
<li>Static. Импортирует компоненты static, а также вложенные типы из одного выбранного, а не из всего пространства имен.</li>
99
<li>Static. Импортирует компоненты static, а также вложенные типы из одного выбранного, а не из всего пространства имен.</li>
100
</ol><p>Пишется using в самом начале корда - до пространственных имен. В противном случае возникнет ошибка компиляции.</p>
100
</ol><p>Пишется using в самом начале корда - до пространственных имен. В противном случае возникнет ошибка компиляции.</p>
101
<p><a>Здесь</a>можно увидеть больше информации о рассмотренной теме. Чтобы быстрее разобраться с int main и иными вопросами именных областей, рекомендуется закончить специализированные дистанционные компьютерные онлайн курсы.</p>
101
<p><a>Здесь</a>можно увидеть больше информации о рассмотренной теме. Чтобы быстрее разобраться с int main и иными вопросами именных областей, рекомендуется закончить специализированные дистанционные компьютерные онлайн курсы.</p>
102
<a></a>
102
<a></a>