
- •Лекция №3 Тема: Среда Microsoft Visual c # 2008 Express Edition. Структура программы в языке c#.
- •Общеязыковая исполняющая среда (Common Language Runtime)
- •Утилиты .Net Framework
- •Основные утилиты .Net Framework
- •Утилиты .Net Framework для отладки приложений
- •Утилиты .Net Framework по работе с защитой приложений
- •Утилиты .Net Framework для настройки и установки приложений
- •Сборки в среде clr
- •1 Общие сведения о сборках
- •2 Содержимое сборок
- •3 Манифест сборки
- •4 Размещение сборок
- •Среда Microsoft Visual c# 2005 Express Edition
- •Структура программы в c#.
- •Пример 1. Программа FirstProject
- •Проекты и среда разработки
- •Пространство имен.
Лекция №3 Тема: Среда Microsoft Visual c # 2008 Express Edition. Структура программы в языке c#.
Технология .NET представляет собой способ разработки и развёртывания программного обеспечения, который с помощью таких широко используемых стандартов как HTTP и XML реализует взаимодействие программ и обеспечивает с помощью Internet доступ к многочисленным программным сервисам.
Технология включает .NET Framework – платформу для разработки и исполнения приложений, которая упрощает и ускоряет разработку, поддерживает полноценное объектно-ориентированное программирование для web, устраняет многие типы наиболее распространённых программных ошибок, предоставляет общий API для всех языков.
Любой программный код, написанный под новую платформу, называется управляемым (managed code) и компилируется в бинарный вид, понятный .NET runtime. Этот формат называется Microsoft Intermediate Language (MSIL, IL, CIL). В связи с этим появляется возможность легкой интеграции кодов, написанных на разных языках программирования, т.к. платформа более низкого уровня у них одна.
Далее, с помощью утилиты al.exe (см. п. 4.) исполняемые модули и другие файлы проекта объединяются в сборку. Следовательно, для создания приложения используя разные языки необходимо лишь откомпилировать каждый отдельный файл в исполняемый модуль, а затем создать из них сборку.
Каркас Framework .Net перестал быть частью студии, а стал надстройкой над операционной системой. Теперь компиляция и создание модулей отделено от выполнения, и эти процессы могут быть реализованы на разных платформах.
Microsoft .NET Framework
.NET Framework – среда для создания и запуска приложений. Все приложения не просто используют библиотеки .NET Framework, но и выполняются под управлением ее компонент.
Её основные компоненты:
общеязыковая исполняющая среда (Common Language Runtime) – динамический компонент;
библиотека классов .NET Framework Class Library – статический компонент.
Общеязыковая исполняющая среда (Common Language Runtime)
Common Language Runtime (CLR) – это набор утилит и служб, которые включают в себя все необходимые средства для создания и запуска приложений.
CLR расположена поверх операционной системы и предоставляет виртуальную среду для управляемых приложений. Код для платформы .NET либо исполняется CLR, либо получает разрешение на исполнение за её пределами.
Весь код для платформы .NET преобразуется CLR в промежуточный код на языке CIL. Поэтому разработчики могут легко интегрировать код, написанный для .NET на различных языках программирования.
Код на CIL начинает выполняться под управлением CLR (по этой причине код называется управляемым). Исполнительную среду можно рассматривать, как своеобразную виртуальную IL-машину. Эта машина транслирует «на лету» требуемые для исполнения участки кода в команды реального процессора, который в действительности и выполняет код.
Другими словами, команды на языке CIL компилируются в машинный код соответствующего типа процессора по запросу (just-in-time) в период выполнения. Обычно компиляция метода происходит один раз во время его первого вызова. Затем результат кэшируется в памяти, чтобы избежать задержек при повторных вызовах. JIT-компилятор выполняет оптимизацию кода специально для процессора, на котором исполняется этот код.
Преобразуя команды CIL в команды процессора, JIT-компилятор выполняет верификацию кода на предмет безопасности типов.
Практически невозможно выполнить команду, обращающуюся к области памяти, к которой у этой команды нет разрешения на доступ. В управляемом приложении устраняется проблема ошибочно инициализированных указателей, запрещается преобразовать тип в нечто, чем он не является, так как это нарушение безопасности типов. CLR не позволяет вызывать методы с разрушенным стековым фреймом.
Ресурсы, выделяемые управляемым кодом, освобождаются сборщиком мусора (Garbage Collector). Иначе говоря, программист только выделяет память, но не освобождает её – это делает CLR. Сборщик мусора отслеживает все ссылки на объекты, создаваемые программой, и уничтожает эти объекты, когда занимаемая ими память требуется где-то ещё. Таким образом, в приложениях с управляемым кодом разрешается проблема утечек памяти.
Верификация кода также является основой способности CLR выполнять несколько приложений внутри одного процесса. Процесс разделяется на виртуальные отсеки – домены приложений (application domain). Таким образом, повышается эффективность использования памяти, выделяемой процессам. Домены приложений не менее безопасны, чем процессы, так как их границы не могут быть нарушены управляемыми приложениями.
Для того чтобы классы, разработанные на разных языках, мирно уживались в рамках одного приложения, для их бесшовной отладки, возможности построения разноязычных потомков, они должны удовлетворять некоторым ограничениям. Эти ограничения задаются набором общеязыковых спецификаций – CLS (Common Language Specification). Класс, удовлетворяющий спецификациям CLS, называется CLS-совместимым. Он доступен для использования в других языках, классы которых могут быть клиентами или наследниками совместимого класса.
Спецификации CLS точно определяют, каким набором встроенных типов можно пользоваться в совместимых модулях. Понятно, что эти типы должны быть общедоступными для всех языков, использующих Framework .Net. В совместимых модулях должны использоваться управляемые данные и выполняться некоторые другие ограничения. Заметьте, ограничения касаются только интерфейсной части класса, его открытых свойств и методов. Закрытая часть класса может и не удовлетворять CLS.
Все компоненты, входящие в CLR представлены на рис.1.2., а именно:
Class loader – управляет загрузкой классов,
MS Intermediate Language – специальный язык независимый от платформы,
Code manager – управляет запуском кода,
Garbage Collector – сборщик мусора, для освобождения неиспользуемых ресурсов памяти,
Security Engine – обеспечивает механизм защиты приложений,
Debugger – позволяет пользователю отлаживать приложение и отслеживать выполнение запущенного приложения,
Type checker – гарантирует правильное приведение типов данных,
Exception manager – обеспечивает механизм передачи исключений,
Thread support – отвечает за поддержку классов для создания многопоточных приложений,
COM marshaler – обеспечивает взаимодействие с СОМ – компонентами.
Base Class Library Support |
|||
Thread Support |
COM Marshaler |
||
Type Checker |
Exception Manager |
||
Security Engine |
Debug Engine |
||
MSIL to Native Compilers |
Code Manager |
Garbage Collector |
|
Class Loader |
Рис.1.2. Компоненты CLR.
Сама CLR состоит из двух главных компонентов:
ядра (mscoree.dll),
библиотеки базовых классов (mscorlib.dll).
Наличие этих файлов на диске – верный признак того, что на компьютере, по крайней мере, была предпринята попытка установки платформы .NET. Ядро среды выполнения реализовано в виде библиотеки mscoree.dll.
При компоновке сборки в неё встраивается специальная информация, которая при запуске приложения (файла с расширением EXE) или при загрузке библиотеки (обращение к DLL из неуправляемого модуля – вызов функции LoadLibrary для загрузки управляемой сборки) приводит к загрузке и инициализации CLR.
После загрузки CLR в адресное пространство процесса, ядро среды выполнения реализует следующие действия:
находит местонахождение сборки,
загружает сборку в память,
производит анализ содержимого сборки (выявляет классы, структуры, интерфейсы),
производит анализ метаданных,
обеспечивает компиляцию кода на промежуточном языке (CIL) в платформозависимые инструкции (ассемблерный код). Фактически создается так называемый управляемый модуль – переносимый исполняемый файл (Portable Executable или PE-файл)1,
выполняет проверки, связанные с обеспечением безопасности,
используя основной поток приложения, передаёт управление преобразованному в команды процессора фрагменту кода сборки.
Ниже представлена схема выполнения .NET приложения в среде CLR.
Рис. 1. Схема выполнения .NET приложения в среде CLR
2..NET Framework Class library (FCL)
В .NET включены сборки библиотеки классов .NET Framework Class library (FCL), содержащие определения нескольких тысяч типов, каждый из которых предоставляет некоторую функциональность. Наборы «родственных» типов собраны в отдельные пространства имён.
К примеру, пространство имён System содержит базовый класс Object, из которого в конечном счёте порождаются все остальные типы. Таким образом, всякая сущность в .NET является объектом со своими полями и методами.
Кроме того, System содержит типы для целых чисел, символов, строк, обработки исключений, консольного ввода-вывода, группу типов для безопасного преобразования одних типов в другие, форматирования данных, генерации случайных чисел и выполнения математических операций. Типами из пространства имён System пользуются все приложения.
Таблица 1. Основные пространства имён FCL
Пространство имён |
Содержание |
System |
Фундаментальные типы данных и вспомогательные классы |
System.Collections |
Хэш-таблицы, массивы переменной размерности и другие контейнеры |
System.Data |
Классы ADO.NET для доступа к данным |
System.Drawing |
Классы для вывода графики (GDI+) |
System.IO |
Классы файлового и потокового ввода-вывода |
System.Net |
Классы для работы с сетевыми протоколами, например, с HTTP |
System.Reflection |
Классы для чтения и записи метаданных |
System.Runtime.Remoting |
Классы для распределённых приложений |
System.ServiceProcess |
Классы для создания служб Windows |
Sustem.Threading |
Классы для создания и управления потоками |
System.Web |
Классы для поддержки HTTP |
System.Web.Services |
Классы для разработки web-сервисов |
System.Web.Services.Protocols |
Классы для разработки клиентов web-сервисов |
System.Web.UI |
Основные классы, используемые ASP.NET |
System.Web.UI.WebControls |
Серверные элементы управления ASP.NET |
System.Windows.Forms |
Классы для приложений с графическим интерфейсом пользователя |
System.Xml |
Классы для чтения и ввода данных в формате XML |
Все управляемые приложения используют библиотеку классов FCL. Это упрощает интеграцию приложений и позволяет легче переносить приложения с одного языка на другой.