* При перепечатке материалов ссылка на www.SeoLiga.ru обязательна!
Структура .NET-приложений
7 февраля 2009
Чтобы понять, как общеязыковая исполняющая среда контролирует исполнение кода, необходимо изучить структуру .NET-приложения. Основным блоком .NET- приложений является сборка (assembly) — самоописываемый набор кода, ресурсов и метаданных. Содержимое сборки описано в ее декларации (manifest), которая включает следующие сведения:
• идентификационные данные сборки, такие, как имя и номер версии; • полный список открытых типов, поддерживаемых сборкой; • список сборок, необходимых для работы данной сборки; • список разрешений на доступ к коду, включающий права доступа, требуемые сборкой, и права, в которых ей будет отказано. У каждой сборки имеется только одна декларация, которая содержит все сведе- ния, описывающие эту сборку. Декларация сборки хранится в отдельном файле либо в одном из модулей сборки. Сборка также содержит один или несколько модулей. Модуль (module) хранит код приложения или библиотеки, а также метаданные, описывающие этот код. Во время компиляции проекта в сборку исходный текст, написанный на языке высо- кого уровня, транслируется в IL-код. Благодаря такому преобразованию свободно взаимодействуют программы на разных языках. Например, можно написать на Visual С# приложение, которое вызывает DLL, разработанную с применением язы- ка Visual Basic .NET. Перед исполнением оба компонента преобразуются в IL-кол, что устраняет проблемы с совместимостью языков высокого уровня. Кроме того, модули содержат типы. Тип — это шаблон кода, инкапсулирующего некоторые данные и обладающего определенной функциональностью. Видов ти- пов два: ссылочные типы, или классы, и типы значений, или структуры. Более по- дробно о них рассказано на занятии 3. Для каждого типа в декларации сборки со- держится описание, понятное CLR. У типа есть поля, свойства и методы, так или иначе участвующие в реализации его функциональности. Например, у класса, пред- ставляющего банковский счет, должны быть поля, свойства и методы, представля- ющие все функции, необходимые для реализации банковского счета. Поля предо- ставляют память для хранения определенного типа данных. Классу банковского счета, скорее всего, понадобится поле для хранения имени вкладчика. Свойства на- поминают поля, но в отличие от них обычно проверяют значения при их установке и извлечении. В нашем примере у класса может быть свойство, хранящее остаток средств на счете. При попытке изменить значение это свойство проверит, не пре- вышают ли изменения заданный предел, и, если это так, запретит выполнение опе- рации. Методы представляют поведение классов, например действия, которые они выполняют над хранимыми данными, либо изменения пользовательского интер- фейса. Продолжая пример, можно предположить, что у класса банковского счета будет метод Transfer, который переносит остаток со счета до востребования на де- позит, а также метод Alert, извещающий пользователя о снижении остатка средств до критического уровня.