Главная > Основы языка С#
<< Предыдущий параграф Следующий параграф >>
Пред.
След.
Макеты страниц

Распознанный текст, спецсимволы и формулы могут содержать ошибки, поэтому с корректным вариантом рекомендуем ознакомиться на отсканированных изображениях учебника выше

Также, советуем воспользоваться поиском по сайту, мы уверены, что вы сможете найти больше информации по нужной Вам тематике

1.3.3. Особенности разработки приложений .NET

Хотя архитектура .NET и гарантирует языковую совместимость между приложениями и внутри приложений, для реализации этой возможности при разработке приложений необходимо следовать некоторым правилам. И дело здесь не в ограниченности возможностей .NET, а в принципиальных трудностях. Например, как быть, если один язык программирования поддерживает беззнаковые типы данных (Delphi, C++), а другой (Java) - нет? Что делать, если один компилятор допускает перегружаемые методы, а другой - нет? Каким должен быть в таких случаях код MSIL?

Как видно, объективные трудности существуют, и для их преодоления в архитектуру .NET включен ряд спецификаций.

В .NET введено логическое понятие пространства имен, которое служит идентификации типов в общих библиотеках и приложениях.

Приложения должны использовать общую систему типов (Common Type System), объединяющую типы данных и операций, присутствующие в большинстве языков программирования.

При написании исходного кода приложений необходимо руководствоваться некоторыми правилами, которые объединены под названием Common Language Specification.

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

 

Пространства имён

 

В .NET применяются пространства имен. Пространство имен - это логическая структура, объединяющая в своем составе другие пространства имен и типы. Ее основное предназначение - идентификация типов (в .NET под типом понимаются и классы, и интерфейсы) и предотвращение конфликтов именования типов. Пространства имен могут быть стандартными или созданными разработчиком.

Типы именуются только с использованием названий пространств имен. Например, существует стандартное пространство имен System.IO, которое объединяет типы, отвечающие за выполнение операций файлового ввода/вывода. Как видно из представления, пространство имен IO - часть глобального пространства System. При помощи операторов используемого языка программирования вы можете добавить к приложению функции того или иного пространства имен. Концепция в чем-то аналогична модулям Delphi для Win32.

Если требуется определить новый тип, то это должно быть сделано в рамках соответствующего пространства имен. К примеру, можно определить тип для хранения имен файлов XML для операций ввода/вывода и тогда обращение к нему в приложении .NET будет выглядеть так: System.IO.XMLFileName.

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

Полный перечень базовых пространств имен можно найти в документации MSDN.

 

Общая система типов

 

Общая система типов (Common Type System, CTS) - это спецификация, которая объединяет все типы и операции, доступные в приложениях .NET. Она разработана путем анализа основных языков программирования высокого уровня, используемых в .NET, и является составной частью среды выполнения CLR, которая посредством CTS осуществляет верификацию кода и обеспечивает безопасность выполнения приложений.

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

 

Правила межъязыкового взаимодействия

 

Для того чтобы приложение (или его фрагмент) правильно воспринималось другими приложениями, написанными на другом языке программирования, оно должно быть разработано с учетом правил спецификации Common Language Specification (CLS). CLS - это набор правил и ограничений, обеспечивающих полную интеграцию кодов, созданных в разных средах разработки и на разных языках программирования. Программный код, созданный с учетом правил межъязыкового взаимодействия, называется CLS- совместимым.

При разработке обычных приложений знание правил CLS не требуется (или требуется в общих чертах для того, чтобы писать более эффективный код). Всю работу по обеспечению правил CLS берет на себя компилятор. Но если вы работаете над каким-либо API, который будет задействован в других приложениях, или ваши сборки будут использованы другими, то знания CLS необходимы.

 

Среда выполнения приложений .NET

 

В зависимости от компилятора, приложения .NET могут быть двух типов: с управляемым и неуправляемым кодом. Компилятор Borland DCCIL, а также компиляторы Microsoft C#, C++, Visual Basic в основном генерируют управляемый код.

Для приложений с управляемым кодом обязательным условием работы является наличие Common Language Runtime — среды выполнения приложений .NET. Среда выполнения реализована в виде динамической библиотеки mscoree.dll. При попытке выполнить приложение .NET (если вы запускаете файл ЕХЕ или DLL приложения .NET) эта динамическая библиотека загружается автоматически и управляет процессом выполнения приложения. Она проводит приложение через следующие операции:

1. поиск файлов, запрашиваемых сборкой и их загрузка;

2. контроль версий и обеспечение безопасности;

3. поиск запрашиваемых типов внутри сборки;

4. компиляция кода MSIL в платформенно-зависимый код;

5. выполнение откомпилированного кода.

В состав среды выполнения (Рис.4) входят следующие функциональные блоки.

Загрузчик, который обеспечивает поиск необходимых файлов, перечисленных в списке манифеста сборки, и загрузку необходимых сборок.

Рисунок 4. Схема работы компиляторов .NET

Компилятор Just In Time (JIT), который транслирует только необходимый код MSIL (как правило, это отдельные процедуры) в платформенно-зависимый машинный код и сохраняет результат в оперативной памяти.

Компилятор Native Image Generator (NGEN), который обрабатывает все приложение и сохраняет результат на жестком диске.

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

К дополнительным службам, предоставляемым менеджером выполнения, относятся:

выделение памяти приложению - для впервые используемых откомпилированных блоков кода выделяется оперативная память и в дальнейшем код остается загруженным на случай повторного применения;

сборка мусора - автоматическое освобождение неиспользуемой памяти и ресурсов по окончании работы приложения;

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

 

Categories

1
Оглавление
email@scask.ru