Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
CSharp Language Specification.doc
Скачиваний:
13
Добавлен:
26.09.2019
Размер:
4.75 Mб
Скачать

9.Пространства имен

Программы на C# организованы с помощью пространств имен. Пространства имен используются как в качестве «внутренней» системы организации для программы, так и в качестве «внешней» системы организации — способа представления программных элементов, предоставляемых другим программам.

Директивы using (§9.4) служат для упрощения использования пространств имен.

9.1Единицы компиляции

Единица_компиляции определяет общую структуру исходного файла. Единица компиляции состоит из 0 или более директив_using, за которыми следуют 0 или более глобальных_атрибутов, за которыми следуют 0 или более объявлений_членов_пространства_имен.

единица_компиляции: директивы_extern_aliasнеобязательно директивы_usingнеобязательно глобальные_атрибутынеобязательно объявления_членов_пространства_именнеобязательно

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

Директивы_using единицы компиляции влияют на глобальные_атрибуты и объявления_членов_пространства_имен этой единицы компиляции, но не влияют на другие единицы компиляции.

Глобальные_атрибуты (§17) единицы компиляции разрешают спецификацию атрибутов для конечной сборки и модуля. Сборки и модули действуют как физические контейнеры для типов. Сборка может состоять из нескольких физически отдельных модулей.

Объявления_членов_пространства_имен каждой единицы компиляции программы размещают члены в одной области объявления, называемой глобальным пространством имен. Например:

Файл A.cs:

class A {}

Файл B.cs:

class B {}

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

9.2Объявления пространства имен

Объявление_пространства_имен состоит из ключевого слова namespace, за которым следует имя и тело пространства имен, а затем точка с запятой (необязательно).

объявление_пространства_имен: namespace уточненный_идентификатор тело_пространства_имен ;необ

проверенный_идентификатор: идентификатор проверенный_идентификатор . идентификатор

тело_пространства_имен: { директивы_внешних_псевдонимовнеобязательно директивы_usingнеобязательно объявления_элементов_пространства_именнеобязательно }

Объявление_пространства_имен может быть объявлением верхнего уровня в единице_компиляции или объявлением члена внутри другого объявления_пространства_имен. Если объявление_пространства_имен встречается как объявление верхнего уровня в единице_компиляции, это пространство имен становится членом глобального пространства имен. Если объявление_пространства_имен встречается внутри другого объявления_пространства_имен, внутреннее пространство имен становится членом внешнего пространства имен. В обоих случаях имя пространства имен должно быть уникальным внутри содержащего пространства имен.

Пространства имен являются неявно общедоступными (public); в объявление пространства имен не могут включаться модификаторы доступа.

Внутри тела_пространства_имен необязательные директивы_using импортируют имена других пространств имен и типов, что позволяет ссылаться на них непосредственно, а не через проверенные имена. Необязательные объявления_членов_пространств_имен размещают члены в области объявлений пространства имен. Обратите внимание, что перед любыми объявлениями членов должны стоять все директивы_using.

Уточненный_идентификатор объявления_пространства_имен может быть одиночным идентификатором или последовательностью идентификаторов, разделенных маркером «.». Последняя форма позволяет программе определять вложенные пространства имен без лексического вложения нескольких объявлений пространств имен. Например:

namespace N1.N2 { class A {}

class B {} }

семантически эквивалентно

namespace N1 { namespace N2 { class A {}

class B {} } }

Пространства имен являются открытыми, и два объявления пространств имен с одним и тем же полным именем могут размещаться в одну и ту же область объявлений (§3.3). В этом примере

namespace N1.N2 { class A {} }

namespace N1.N2 { class B {} }

два объявления пространств имен вверху размещаются в одной и той же области объявлений, объявляя в этом случае два класса с полными именами N1.N2.A и N1.N2.B. Поскольку эти два объявления размещаются в одной и той же области объявлений, было бы ошибкой, если бы в каждом содержалось объявление члена с одним и тем же именем.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]