Что такое пространство имен в net framework
Что такое пространство имен?
Чтобы гарантировать, что конфликты имен не возникнут ни в рамках .NET framework, ни в ваших собственных программах, используются пространства имен. Пространство имен просто предоставляет именованную группу классов, структур, перечислений, делегатов, интерфейсов и других пространств имен. В пространстве имен все объявленные элементы должны иметь уникальные имена. Однако одно и то же имя может дублироваться в разных пространствах имен. Это означает, что если вы решите создать математическую библиотеку, вы сможете назвать ее "Math", хотя Microsoft также предоставила математическую библиотеку.
Объявление пространства имен
Пространства имен объявляются с помощью ключевого слова namespace. Основной синтаксис для создания пространства имен очень прост, требуется только имя для новой группировки и блок кода, окруженный фигурными скобками:
Пример пространства имен
Чтобы продемонстрировать создание пространства имен, мы создадим некоторый код. Для начала создайте новое консольное приложение с именем NamespaceDemo. Если вы создаете проект с помощью Visual Studio, вы заметите, что автоматически созданный класс программы существует в пространстве имен, которое также называется "NamespaceDemo".
В одном файле кода можно определить несколько пространств имен. В этом случае мы добавим наше новое пространство имен в тот же файл, что и автоматически созданное. Добавьте следующее пространство имен и содержащий его класс в качестве основания кода, вне блока кода существующего пространства имен:
Этот код создает новое пространство имен с именем FirstNamespace и определяет класс "Test", содержащий один метод, который выводит строку в консоль. Теперь мы можем добавить второе пространство имен, опять же в конце кода:
Второе пространство имен также включает класс с именем "Test". Это не приводит к конфликту именования, поскольку два класса логически разделены пространствами имен. Это означает, что программа будет компилироваться без ошибок.
Аддитивные объявления пространств имен
Объявления пространства имен являются аддитивными. Это означает, что одно и то же определение пространства имен может быть включено в код в нескольких местах. Если сделано два или более соответствующих объявления, содержимое двух пространств имен объединяется в одно. Это особенно полезно, когда приложение может быть развернуто в разных версиях, поскольку дополнительный код может быть помещен в отдельные файлы кода. Затем файлы можно "поменять местами" для создания различных конфигураций сборки.
Добавление следующего кода расширит пространство имен FirstNamespace, добавив второй класс:
Ссылка на класс в другом пространстве имен
Пространства имен предотвращают конфликты между именами классов, изолируя содержимое каждого пространства имен. В приведенном выше примере код, созданный в классе "Program", не может получить доступ к классам в пространствах имен" FirstNamespace "и" SecondNamespace", просто ссылаясь на тестовый класс. Если основной метод программы будет обновлен следующим образом, код не будет компилироваться, так как не будет найден класс Test:
Директива using
Если бы Вы были обязаны префиксировать каждое использование каждого класса, структуры, перечисления и т. д. с именем пространства имен, содержащего его, ваш код станет громоздким. Чтобы избежать этого, можно использовать директиву using. Вы уже видели эту директиву в действии в начале почти каждого созданного вами файла кода.
Директива using сообщает компилятору, что пространство имен используется кодом. Когда компилятор находит имя класса, которое не распознается в текущем пространстве имен, он вместо этого проверяет каждое пространство имен, определенное в директиве using, чтобы увидеть, существует ли там элемент. Это означает, что полное имя элементов в таком ссылочном пространстве имен использоваться не требуется.
Чтобы добавить директиву using в код, ключевое слово using и имя пространства имен добавляются в начале файла кода. Например, чтобы добавить ссылку на пространство имен FirstNamespace, добавьте следующую строку в начале кода:
Теперь, когда компилятор знает, что это разрешено, чтобы проверить внутри "FirstNamespace", чтобы соответствовать имена классов, основной метод может быть обновлен, чтобы сделать его более удобным для чтения:
Создание псевдонимов
Директива using, как показано выше, может обеспечить гораздо более аккуратный код. Однако если включены две директивы using и каждое ссылочное пространство имен содержит соответствующее имя класса, создается конфликт имен. Чтобы показать эту проблему, добавьте вторую директиву using в код, ссылающийся на пространство имен SecondNamespace:
Теперь, когда оба дополнительных пространства имен ссылаются, компилятор не знает, какой тестовый класс использовать при создании объекта в основном методе. Попытка скомпилировать программу приводит к ошибке, которая объясняет, что "тTest" теперь является неоднозначной ссылкой.
Эта проблема может быть решена простым предоставлением полного имени при использовании тестовых классов. Однако имена пространств имен могут быть очень длинными, и это создает оригинальную проблему, затрудняющую чтение кода. Вместо этого директиву using можно использовать для создания псевдонима. Это позволяет связать более короткое имя с пространством имен и использовать его вместо пространства имен для квалификации класса.
Для создания псевдонима используется следующий синтаксис:
Alias-name - это имя псевдонима, которое будет отображаться в любом другом месте кода. namespace - это пространство имен для создания псевдонима. Чтобы применить псевдонимы для двух пространств имен, измените директивы using следующим образом:
Добавление псевдонимов удаляет возможность ссылаться на классы без предоставления псевдонима полного имени. Чтобы сделать возможным повторную компиляцию программы, измените объявление тестового объекта в методе Main для добавления псевдонима:
Вложенное пространство
Мы видели, как классы и другие элементы могут быть объявлены в пространстве имен, чтобы обеспечить группировку элементов кода и изоляцию имен для предотвращения конфликтов. Кроме того, пространства имен могут быть созданы в других пространствах имен для создания вложенной классификации. Это позволяет создавать глубокие древовидные структуры и осуществлять большой контроль над организацией модулей кода.
Рассмотрим следующие объявления вложенных пространств имен:
В этом случае существует три уровня пространства имен, каждый из которых объявлен внутри своего родителя. Класс "Test" объявляется в пределах третьего уровня вложенности. Чтобы получить доступ к этому классу, используя его полное имя, все три пространства имен должны быть указаны с каждым префиксом его дочернего элемента и разделены с помощью полной остановки. Таким образом, полное имя тестового класса - "Parent.Ребенок.Внук.Испытание".
Как и в случае однослойных пространств имен, директива using может быть добавлена для удаления требования использовать полное имя. В этом случае директива using будет иметь вид:
Более короткая нотация существует для объявления вложенного пространства имен, когда классы и другие объявления существуют только на самом глубоком уровне иерархии. Вместо того, чтобы определять каждое пространство имен по отдельности, пространства имен могут быть созданы в одном операторе, опять же с каждым пространством имен, разделенным полной остановкой. Следующий код функционально эквивалентен предыдущему образцу вложенных пространств имен:
Соглашение об именовании пространств имен
Предлагаемое пространство имен должно иметь следующий формат:
В этом соглашении об именовании CompanyName - это имя компании или бренда, которому принадлежит код. Для длинных названий компаний это должно быть уменьшено в размере, но стандартизировано по всей организации. TechnologyName относится к высокоуровневой технологии, к которой относятся классы в пространстве имен. Например, "Xml" для функций XML.
Feature - это необязательный элемент, который дает имя объекту в пространстве имен технологии. Наконец, пространство имен "Design" предлагается для пространств имен, содержащих функциональные возможности времени разработки. Примером пространства имен, содержащего элементы времени разработки пользовательских элементов управления мультимедиа для DVD-фильмов, может быть:
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Предоставляет простой программный интерфейс для многих современных сетевых протоколов. Классы WebRequest и WebResponse образуют основу так называемых подключаемых протоколов, которые представляют собой реализацию сетевых служб, позволяющих разрабатывать приложения, использующие ресурсы Интернета, не заботясь о конкретных особенностях отдельных протоколов.
Перечисления
Указывает протоколы проверки подлинности.
Указывает коды состояния, возвращаемые для FTP-операции.
Задает разрешения доступа к сети.
Указывает протоколы безопасности, которые поддерживаются пакетом безопасности Schannel.
Определяет типы транспорта для классов SocketPermission и Socket.
Определяет коды состояния для класса WebException.
Классы
Управляет модулями проверки подлинности, вызываемыми в процессе проверки подлинности учетных данных клиента.
Предоставляет набор свойств и методов, которые используются для управления файлами cookie. Этот класс не наследуется.
Предоставляет контейнер коллекции для экземпляров класса Cookie.
Предоставляет контейнер для коллекции объектов CookieCollection.
Исключение, возникающее, когда происходит ошибка при добавлении Cookie к CookieContainer.
Предоставляет хранилище для множества учетных данных.
Предоставляет простые функциональные возможности разрешения доменных имен.
Представляет сетевую конечную точку в качестве имени узла или строкового представления IP-адреса и номера порта.
Управляет правами доступа к DNS-серверам в сети.
Устанавливает разрешение на запрос сведений с DNS-серверов.
Предоставляет данные для события DownloadDataCompleted.
Предоставляет данные для события DownloadProgressChanged объекта WebClient.
Предоставляет данные для события DownloadStringCompleted.
Определяет сетевой адрес. Это класс abstract .
Определяет конечную точка, авторизованную экземпляром SocketPermission.
Предоставляет реализацию файловой системы класса WebRequest.
Предоставляет реализацию файловой системы класса WebResponse.
Инкапсулирует ответ FTP-сервера на запрос.
Хранит имя пользователя и пароль для запроса обычной проверки подлинности.
Представляет сетевую конечную точку в виде IP-адреса и номер порта.
Представляет коллекцию, которая используется для хранения конечных точек сети в качестве объектов IPEndPoint.
Предоставляет класс контейнеров для сведений об адресе веб-узла.
Предоставляет учетные данные для схем проверки подлинности на основе пароля, таких как обычная или дайджест-проверка подлинности либо проверка подлинности NTLM или Kerberos.
Предоставляет данные события изменения хода выполнения сети.
Предоставляет данные для события OpenReadCompleted.
Предоставляет данные для события OpenWriteCompleted.
Исключение, создаваемое при возникновении ошибки во время использования сетевого протокола.
Управляет коллекцией объектов ServicePoint.
Сохраняет сведения о сериализации для производных классов EndPoint.
Управляет правами на установление или принятие подключений для адреса транспорта.
Указывает действия по обеспечению безопасности для управления подключениями Socket. Этот класс не наследуется.
Класс TransportContext предоставляет дополнительный контекст о подлежащем транспортном слое.
Предоставляет контекст синхронизации для управляемого пользовательского интерфейса, используемого в моделях синхронизации.
Предоставляет данные для события UploadDataCompleted.
Предоставляет данные для события UploadFileCompleted.
Предоставляет данные для события UploadProgressChanged объекта WebClient.
Предоставляет данные для события UploadStringCompleted.
Предоставляет данные для события UploadValuesCompleted.
Предоставляет общие методы обмена данными с ресурсом, заданным URI.
Исключение, которое выдается, если при обращении к сети через подключаемый протокол возникает ошибка.
Содержит заголовки протокола, связанные с запросом или ответом.
Задает разрешение для доступа к интернет-ресурсам. Этот класс не наследуется.
Выполняет запрос к универсальному коду ресурса (URI). Это класс abstract .
Представляет тип методов файловых протоколов, который может использоваться вместе с запросом FILE. Этот класс не наследуется.
Представляет типы методов протокола FTP, которые могут использоваться вместе с FTP-запросом. Этот класс не наследуется.
Предоставляет ответ с URI. Это класс abstract .
Предоставляет методы для кодирования и декодирования URL-адресов при обработке веб-запросов.
Предоставляет данные для события WriteStreamClosed.
полные имена
Полные имена — это ссылки на объекты, имеющие префикс в виде имени пространства имен, в котором определен объект. Вы можете использовать объекты, определенные в других проектах, если создадите ссылку на класс (выбрав Добавить ссылку в меню Проект ) и затем используете полное имя объекта в коде. В следующем фрагменте кода показано, как использовать полное имя объекта из пространства имен другого проекта:
Полные имена предотвращают возникновение конфликтов имен, так как позволяют компилятору определить, какой именно объект используется. Однако сами эти имена могут получиться длинными и громоздкими. Чтобы обойти эту проблему, можно использовать оператор Imports для определения Imports — сокращенного имени, которое можно применить вместо полного имени. Например, в следующем примере кода создаются псевдонимы для двух полных имен, которые затем используются для определения двух объектов.
Если вы применяете оператор Imports без псевдонима, можно использовать все имена в данном пространстве имен без уточнения при условии, что они являются уникальными в данном проекте. Если проект содержит операторы Imports для пространств имен, где есть элементы с одинаковым именем, необходимо полностью уточнять это имя. Предположим, что проект содержал два следующих оператора Imports :
при попытке использовать Class1 без полного указания этого имени Visual Basic выдает ошибку, сообщающую, что имя Class1 неоднозначно.
Пространства имен уровня файла
Глобальные пространства имен и пространства имен уровня файла
Ключевое слово Global в полных именах
Можно использовать Global для доступа к другим пространствам имен корневого уровня, таким как Microsoft.VisualBasic, и любому пространству имен, сопоставленному с проектом.
Вложенные пространства имен
Здесь мы определили вложенное пространство имен (namespace) MyNamespace . Теперь, чтобы использовать класс Data мы должны сделать так:
то есть, перед именем класса ( Data ) мы указываем название пространства имен ( MyNamespace ).
Более предпочтительным с точки зрения читабельности и поддержки проекта является организация пространства имен непосредственно через обозреватель решений Visual Studio . По умолчанию Visual Studio создает новое пространство имен в проекте на каждую папку в проекте. Например, создадим в нашем проекте попку с именем Base:
Теперь кликнем по папке правой кнопкой мыши, выберем в меню пункт «Добавить» и «Создать элемент»:
Создадим новый класс с названием BaseClass :
Обратите внимание на то, какое имя пространству имен присвоила Visual Studio :
По умолчанию, Visual Studio создала новый класс в пространстве имен составленному по шаблону: [Имя_проекта].[Папка_с_файлом]
Аналогичным образом мы можем создать поддиректорию в папке Base и пространство имен снова будет соответствовать физическому пути на диске, например:
Физически этот интерфейс располагается по пути /Base/Interfaces/IView.cs
Таким образом, мы, с одной стороны можем логически разделять отдельные классы и объекты по пространствам имен, а, с другой стороны — подобное разделение (с использованием папок) будет наглядно видно в «Обозревателе решений»:
Интерфейсы
Предоставляет базовый интерфейс проверки подлинности для модулей проверки подлинности, принадлежащих веб-клиенту.
Проверяет достоверность сертификата сервера.
Определяет политику учетных данных, используемую для запросов, создаваемых с помощью WebRequest и соответствующих производных классов.
Базовый интерфейс проверки подлинности для извлечения учетных данных с целью проверки подлинности веб-клиентов.
Предоставляет интерфейс для извлечения учетных данных для узла, порта и типа проверки подлинности.
Предоставляет Сведения о ходе выполнения сети при отправке данных по сети.
Создает небезопасный WebRequest к URI.
Предоставляет базовый интерфейс, помогающий реализовать доступ к прокси-серверу для класса WebRequest.
Предоставляет базовый интерфейс для загрузки и выполнения скриптов автоматического обнаружения прокси-сервера.
Предоставляет базовый интерфейс для создания экземпляров класса WebRequest.
Ключевое слово Global в операторах пространства имен
Можно также использовать ключевое слово Global в Global . Это позволяет определить пространство имен из корневых пространств имен проекта.
Все пространства имен в проекте основаны на его корневом пространстве имен. Visual Studio назначает имя проекта в качестве корневого пространства имен по умолчанию для всего кода в проекте. Например, если проект называется ConsoleApplication1 , его программные элементы относятся к пространству имен ConsoleApplication1 . При объявлении Namespace Magnetosphere ссылки на Magnetosphere в проекте будут обращаться к ConsoleApplication1.Magnetosphere .
В следующих примерах используется ключевое слово Global для объявления пространства имен из корневого пространства имен для проекта.
В объявлении пространства имен Global не может быть вложенным в другое пространство имен.
Вы можете использовать Application Page, Project Designer (Visual Basic) для просмотра и изменения значения Корневое пространство имен проекта. Для новых проектов параметру Корневое пространство имен по умолчанию присваивается имя проекта. Чтобы сделать Global пространством имен верхнего уровня, можно очистить запись Global , оставив поле пустым. Очистка значения Корневое пространство имен избавляет от необходимости использовать ключевое слово в объявлениях пространств имен.
В следующем примере ключевое слово Global присутствует в объявлении пространства имен System.Text .
Если ключевое слово Global отсутствует в объявлении пространства имен, к StringBuilder нельзя обратиться без указания Global.System.Text.StringBuilder . Если ключевое слово ConsoleApplication1 не использовалось, для проекта с именем System.Text ссылки на ConsoleApplication1.System.Text обращаются к Global .
Чтобы определить пространство имен используется следующая конструкция:
Здесь уже создано пространство имен для нашего приложения — ConsoleApp1 .
Предотвращение конфликтов имен
На следующем рисунке показаны две иерархии пространства имен, содержащие объект с именем ListBox :
по умолчанию каждый исполняемый файл, созданный с помощью Visual Basic, содержит пространство имен с тем же именем, что и у проекта. Например, если вы определяете объект в проекте ListBoxProject , то исполняемый файл ListBoxProject.exe содержит пространство имен ListBoxProject .
Несколько сборок могут использовать одно и то же пространство имен. Visual Basic обрабатывает их как единый набор имен. Например, можно определить классы для пространства имен SomeNameSpace в сборке Assemb1 , а также определить дополнительные классы для того же пространства имен из сборки Assemb2 .
Операторы уровня пространства имен
В пространстве имен можно определить такие элементы, как модули, интерфейсы, классы, делегаты, перечисления, структуры и другие пространства имен. Вы не можете определить такие элементы, как свойства, процедуры, переменные и события, на уровне пространства имен. Их следует объявить внутри контейнеров, таких как модули, структуры или классы.
Итого
Приложения (программы) можно разрабатывать на разных языках программирования, которые поддерживают эту технологию.
- совместное использование разных языков программирования;
- безопасность и переносимость программ;
- общую модель программирования на базе платформы Windows.
- общеязыковая исполнительная среда CLR ( Common Language Runtime );
- библиотека базовых классов.
Библиотека базовых классов включает в себя определение разнообразных примитивов, которыми могут быть: потоки, графические API-интерфейсы, реализация баз данных, файловый ввод-вывод и прочее.
3. Какой принцип действия общеязыковой среды выполнения CLR ( Common Language Runtime )?
Основное назначение CLR – превратить промежуточный код MSIL в исполнительный код в процессе выполнения программы.
Рис. 1. Процесс преобразования исходного кода в код на языке MSIL ( CIL или IL ) и создание файла сборки ( *.dll или *.exe )
После этого, псевдокод превращается в исполняемый код. Это осуществляет JIT -компилятор. JIT ( Just-in-time ) -компиляция – это компиляция на «лету».
Исполнительная среда CLR отвечает за определение места размещения сборки (assembly).
Запрашиваемый тип, который размещается в сборке (например, класс ArrayList или другой тип), определяется в двоичном файле ( *.dll или *.exe ) с помощью считывания метаданных этого файла.
После этого CLR размещает в памяти считанный из сборки тип.
Затем CLR превращает CIL-код в соответствующие инструкции, которые подстраиваются под конкретную платформу (в зависимости от ПК, операционной системы и т.п.). Кроме того, на этом этапе происходят необходимые проверки на предмет безопасности.
Последним происходит выполнение запрашиваемого программного кода.
4. Что такое промежуточный язык MSIL ( Microsoft Intermediate Language ) или CIL ( Common Intermediate Language )?
MSIL есть псевдокодом. MSIL определяет набор инструкций, которые:
- могут переноситься на разные платформы;
- не зависят от конкретного процессора.
Фактически, MSIL – это язык переносного ассемблера
Сборка предназначена для сохранения пространств имен ( namespaces ). Пространства имен содержат типы. Типами могут быть классы, делегаты, интерфейсы, перечисления, структуры.
Сборка может содержать любое количество пространств имен. Любое пространство имен может содержать любое количество типов (классов, интерфейсов, структур, перечислений, делегатов).
6. Что размещается в сборках?
В сборках размещается CIL -код ( MSIL -код или IL -код) и метаданные.
7. Что такое манифест ( manifest )?
Манифест – это описание самой сборки с помощью метаданных.
В манифесте размещается информация:
- о текущей версии сборки;
- сведения о культуре (локализация строчных и графических ресурсов);
- перечень ссылок на все внешние сборки, которые нужны для правильного функционирования.
Если в исходном коде используются библиотеки базовых классов (например из сборки mscorlib.dll ), то они загружаются с помощью загрузчика классов.
JIT -компилятор осуществляет компиляцию сборки с учетом (привязкой) аппаратных и программных особенностей компьютера, на котором происходит запуск приложения.
После этого приложение выполняется.
9. Какие существуют виды сборок?
Существует два вида сборок:
- однофайловые сборки;
- многофайловые сборки.
Сборка, которая состоит из одного единого модуля ( *.dll или *.exe ) называется однофайловой. В однофайловых сборках все необходимые CIL -инструкции, метаданные и манифесты размещаются в одном, четко определенном пакете.
В многофайловой сборке один из модулей есть главным ( primary ).
10. В каком файле размещается главная сборка библиотеки MS Visual Studio?
Главная сборка размещается в файле “ mscorlib.dll ”.
11. Что такое общая система типов CTS ?
CTS ( Common Type System ) – система типов, которая содержит полное описание всех возможных типов данных и программных конструкций, которые поддерживаются общеязыковой исполнительной средой CLR . Также здесь описывается то, как эти сущности могут взаимодействовать между собою.
Типами могут быть классы, интерфейсы, структуры, перечисления, делегаты.
12. Какое назначение общеязыковой спецификации CLS?
14. Что такое пространство имен ( namespace )?
Пространство имен предназначено для объединения группы типов, которые связаны между собою с семантической точки зрения. Типы размещаются в сборках ( assembly ). Под типами понимаются классы, делегаты, интерфейсы, структуры, перечисления.
Примеры названий пространств имен:
Например, в пространстве имен System.Data размещаются основные типы для работы с базами данных, в пространстве имен System.Collections размещаются основные типы для работы с коллекциями.
15. Как вывести содержимое сборок, пространств имен и типов в MS Visual Studio ?
В системе Microsoft Visual Studio есть утилита Object Browser , которая вызывается с меню View (рисунок 3).
Рис. 3. Вызов утилиты Object Browser
В результате откроется окно Object Browser , в котором будут отображаться сборки, которые используются в определенной технологии.
Рис. 4. Окно Object Browser с выделенной сборкой mscorlib.dll
Если раскрыть содержимое сборки mscorlib (знак “ + ”), то будет отображен список всех пространств имен данной сборки (рисунок 5). Как видно из рисунка, сборка включает пространства имен Microsoft.Win32 , System , System.Collections , System.Collections.Concurrent и много других.
Рис. 5. Сборка mscorlib и список пространств имен, которые входят в нее
Аналогично раскрывается любое из пространств имен. В пространствах имен описываются типы. В типах описываются методы, свойства, константы и т.п.
На рисунке 6 изображен класс BinaryReader из пространства имен System.IO . По всей видимости, в классе реализованы методы с именами BinaryReader() , Close() , Dispose() , FillBuffer() и прочие.
Рис. 6. Содержимое класса BinaryReader
Для подключения пространства имен используется ключевое слово using .
Примеры подключения пространств имен:
После подключения пространства имен можно обращаться к типам, которые в них реализованы.
Делегаты
Представляет метод, указывающий локальный IP-адрес и номер порта для точки обслуживания ServicePoint.
Представляет метод, обрабатывающий событие DownloadDataCompleted объекта WebClient.
Представляет метод, обрабатывающий событие DownloadProgressChanged объекта WebClient.
Представляет метод, обрабатывающий событие DownloadStringCompleted объекта WebClient.
Представляет метод, который извещает вызывающие операторы о получении клиентом продолжения ответа.
Представляет метод, обрабатывающий событие OpenReadCompleted объекта WebClient.
Представляет метод, обрабатывающий событие OpenWriteCompleted объекта WebClient.
Представляет метод, обрабатывающий событие UploadDataCompleted объекта WebClient.
Представляет метод, обрабатывающий событие UploadFileCompleted объекта WebClient.
Представляет метод, обрабатывающий событие UploadProgressChanged объекта WebClient.
Представляет метод, обрабатывающий событие UploadStringCompleted объекта WebClient.
Представляет метод, обрабатывающий событие UploadValuesCompleted объекта WebClient.
Представляет метод, обрабатывающий событие WriteStreamClosed объекта WebClient.
Пространства имен упорядочивают объекты, определенные в сборке. Сборки могут содержать несколько пространств имен, которые, в свою очередь, могут содержать другие пространства имен. Пространства имен предотвращают неоднозначность и упрощают ссылки при использовании больших групп объектов, таких как библиотеки классов.
Глобальные пространства имен
Глобальные пространства имен удобно использовать в том случае, если вам необходимо использовать это пространство имен во всем (или в большинстве файлов) проекте. Например, уже используемое нами пространство имен System можно определить как глобальное. Чтобы определить глобальное пространство имен необходимо перед его объявлением использовать ключевое слово global .
Теперь нам нет необходимости в каждом файле проекта для которого необходимо использование пространства имен System использовать конструкцию using System; .
Глобальные пространства имен можно определять в любом месте проекта, однако при этом, пространство имен с параметром global всегда должно находиться в коде выше, чем пространство имен без global :
Как можно видеть на скриншоте, Visual Studio указывает нам на то, что пространство имен с global необходимо перенести ВЫШЕ. И хоть мы имеем право определить глобальное пространство в любом удобном для нас месте, все же стоит придерживаться элементарных правил хорошего тона и постараться обеспечить поддержку нашего проекта в любом обозримом будущем. Поэтому все глобальные пространства имен лучше вынести в отдельный файл и назвать этот файл наиболее подходящим образом, например, GlobalUsings.cs или GlobalNamespaces.cs :
В обозревателе решений этот файл находится на самом верхнем уровне в проекте:
Читайте также: