Из чего состоят пространства имен
В нашем примере пространства имен состояли из классов, модулей и других пространств имен. А вот из чего пространства имен имеют право состоять:
- Классы (Class)
- Модули (Module)
- Структуры (Structure)
- Перечисления (Enum)
- Другие пространства имен (Namespace)
- Интерфейсы (Interface)
- Делегаты (Delegate)
О двух последних компонентах я ранее кратко упоминал, но не углублялся в них и углубляться не собираюсь. Начинающим знать их не обязательно.
Все эти компоненты записываются в теле пространства имен в произвольном порядке друг под другом, как мы это и делали в примере, и в промежутках между ними ничего писать нельзя.
Для нас непривычным является то, что структуры и перечисления могут непосредственно входить в состав пространств имен. До этого мы их писали только внутри классов и модулей. Однако, это удобно. Например, структура Color настолько популярна и значима, что быть составной частью какого-нибудь класса ей явно не по рангу. Поэтому она входит непосредственно в состав пространства имен System.Drawing и это хорошо. Если бы она входила внутрь класса, это привело бы к тому, что обращение к ней в коде только удлинилось. То же самое можно сказать о популярных перечислениях.
Как видите, в списке компонентов пространств имен не значатся ни процедуры, ни функции, ни другие элементы. Значит, процедуры, функции, переменные и прочие мелкие детали не могут прямо входить в пространства имен. А как же они туда входят? Об этом в следующем подразделе.
На этом уровне классы, структуры и модули не могут быть объявлены модификатором Private. Это значило бы, что они никому не видны. Зачем тогда мы их создавали?
Мы определили из каких составных частей состоят пространства имен. А теперь определим, из чего состоят эти составные части.