
- •Лекции по курсу "Технология программирования" (1-й семестр) Оглавление
- •Технология .Net Предыдущее состояние дел.
- •Главные компоненты платформы .Net (clr, cts и cls)
- •Общеязыковая среда выполнения (clr)
- •О бщая система типов и общеязыковые спецификации (cts и cls)
- •Библиотека базовых классов
- •Роль языка с#
- •Компоновочные блоки
- •Роль метаданных типов .Net
- •Роль манифеста компоновочного блока
- •Общая система типов.
- •Объектно-ориентированное программирование
- •Главные элементы объектно-ориентированного подхода
- •Дополнительные элементы ооп
- •Принципы объектно-ориентированного программирования.
- •Классы Инкапсуляция
- •Объект (экземпляр класса).
- •Ключевое слово this
- •Отношения между объектами.
- •Основные отличительные особенности класса
- •Спецификаторы доступа
- •Состав класса
- •Поля класса
- •Доступ к полям
- •Статические и экземплярные переменные
- •Методы (функции-члены класса)
- •Переменное число параметров метода
- •Статические методы
- •Конструкторы
- •Закрытые конструкторы или классы без экземпляров
- •Статические конструкторы.
- •Деструкторы
- •Абстрактные методы и классы.
- •Свойства
- •Индексаторы
- •Статические классы
- •Частичные классы
- •Рекомендации по программированию
- •Наследование Понятие наследования в программировании
- •Типы наследования
- •Наследование реализации
- •Определение наследующих классов
- •Уровень доступа protected и internal
- •Ссылка на объект базового класса
- •Протоклассы
- •Предотвращение наследования с помощью ключевого слова sealed.
- •Отношения между классами
- •Абстрактные классы.
- •Класс object
- •Функциональные замыкания
- •Разработка функциональных замыканий с помощью наследования
- •Разработка функциональных замыканий с помощью экземпляров класса
- •Заключение.
- •Полиморфизм
- •Полиморфизм наследующих классов.
- •Переопределение методов родительского класса. Раннее связывание.
- •Виртуальные методы и их переопределение.
- •Как вызывают виртуальные методы
- •Виртуальные функции и принцип полиморфизма
- •Перегрузка.
- •Перегруженные конструкторы
- •Рекомендации программисту.
Компоновочные блоки
Несмотря на то, что бинарные .NET-единицы имеют такие же расширения файлов, как СОМ-серверы и неуправляемые программы Win32 (*.dll или *.exe), но их внутреннее устройство и содержимое совершенно другое. Например, бинарные .NET-единицы содержат не специфические для конкретной платформы инструкции, а независимые от нее IL-инструкции и метаданные типов.
П
осле
создания *.dll или *.exe
с помощью подходящего .NET-компилятора,
соответствующий модуль упаковывается
в компоновочный блок. Компоновочный
блок содержит программный код на языке
IL, который не
компилируется в специфические для
соответствующей платформы инструкции
до тех пор, пока это не станет абсолютно
необходимым. Обычно эта необходимость
означает тот момент, когда на какой-то
блок IL-инструкции
выполняется ссылка для его использования
в среде выполнения .NET.
В добавление к IL-инструкциям, компоновочные блоки содержат метаданные, которые подробно описывают особенности каждого типа внутри данной бинарной .NET -единицы. Метаданные .NET более совершенны по сравнении с метаданными СОМ. Бинарные СОМ-объекты обычно описываются с помощью библиотеки ассоциированных типов, а это почти то же самое, что и бинарная версия IDL-кода (язык определения интерфейсов). Проблема использования СОМ-информации состоит в том, что эта информация не обязательна и IDL-код не может документировать внешние серверы, которые нужны для правильного функционирования данного СОМ-сервера. В противоположность этому метаданные .NET присутствуют обязательно и автоматически генерируются соответствующим компилятором.
Наконец, в добавление к IL и метаданным типов, сами компоновочные блоки, также описываются с помощью метаданных, для которых используется специальное название манифест. Манифест содержит информацию о текущей версии компоновочного блока, информацию о "культуре" и список всех ссылок на внешние компоновочные блоки, которые требуются для правильного функционирования.
Во многих случаях компоновочные блоки .NET – это просто файлы двоичного кода (*.dll или *.exe). Можно считать, что файл двоичного кода и компоновочный блок – это одно и то же. Если строится приложение для настольной системы, то файл *.exe тоже можно считать компоновочным блоком. Строго говоря, компоновочные блоки могут состоять из одного модуля или из нескольких. Одномодульный компоновочный блок содержит весь необходимый код IL, метаданные и манифест в одном автономном отдельном пакете.
Многомодульные компоновочные блоки, в свою очередь, складываются из из множества бинарных .NET-единиц, каждая из которых называется модулем. При этом один из таких модулей (он называется первичным модулем) должен содержать манифест компоновочного блока и может содержать также IL-инструкции и метаданные различных типов. В манифесте первичного модуля компоновочного блока документируется набор необходимых "второстепенных" (связанных) модулей. Модули, связанные с первичным, содержат манифест уровня модуля, инструкции IL и метаданные типов.