Файл: 1_C#_Введение_в_программирование_Уч_пособ_(Марченко-2005).pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 11.12.2025
Просмотров: 1319
Скачиваний: 3
Марченко А.Л.
C#. Введение в программирование
Учебное пособое
Издательство Московского университета
2005
Московский Государственный Университет им. М.В.Ломоносова
Геологический факультет кафедра сейсмометрии и геоакустики
Марченко А.Л.
C#. Введение в программирование
Учебное пособое
Издательство Московского университета
2005
2
Рецензенты:
В пособии описывается синтаксис языка программирования Microsoft C# .NET, множества классов, применяемых для разработки приложений на платформе .NET, излагаются основы объектно-ориентированного программирования, методы создания элементов пользовательского интерфейса и работы с базами данных.
Для студентов младших курсов.
© Издательство Московского Университета, 2005
3
Предисловие
Настоящее учебное пособие представляет собой краткое изложение лекций, читаемых в рамках двухсеместрового учебного курса по информатике.
Основные задачи пособия заключаются:
в ознакомлении слушателей с синтаксисом и семантикой языка программирования
C#,
в описании особенностей архитектуры .NET,
в формировании навыков разработки приложений в рамках парадигмы объектноориентированного программирования.
При описании синтаксиса некоторых языковых конструкций C# в пособии использовалась нотация Бэкуса-Наура. Формы Бэкуса-Наура (БНФ) традиционно используются при описании грамматики формальных языков (в том числе и языков программирования). Несмотря на непривычный внешний вид, эти формы достаточно просто интерпретируются, отличаются лаконичностью и точностью. Формы состоят из доступных пониманию буквосочетаний, называемых нетерминальными и терминальными символами. Особого внимания в БНФ заслуживает символ ‘::=’,
который в буквальном смысле переводится как “СОСТОИТ ИЗ”. |
Определение |
|||||
языковой |
конструкции |
в |
БНФ |
предполагает |
размещение |
какого-либо |
нетерминального символа слева от символа ‘::=’. В правой части формы размещается последовательность отображающих структуру определяемого понятия нетерминальных и терминальных символов. Терминальные символы не требуют расшифровки (дополнительных БНФ), поскольку являются конструкциями описываемого языка программирования. Некоторые элементы в рамках БНФ заключаются в прямые скобки. Так в данной нотации обозначаются те элементы описываемой синтаксической конструкции, количество вхождений которых с точки зрения систаксиса не ограничено. В данном контексте их может быть один, два, три, … , много, а может и не быть вовсе.
Пособие разрабатывалось на основе находящейся в открытом доступе литературы и не исключает необходимости ознакомления по крайней мере с несколькими из приводимых в списке литературы и ставшими на сегодняшний день классическими книг по языку программирования C#.
Вприложении содержится большое количество примеров. В ряде случаев это всего лишь документированные фрагменты программного кода, однако значительная часть приводимых в пособии примеров является законченными работающими приложениями. И хотя к пособию НЕ прилагается никаких контрольных вопросов, упражнений или задач, необходимым условием успешного усвоения материала (и обязательным заданием!) является воспроизведение, анализ и модификация приводимого в пособии кода.
Впримерах часто используются операторы консольного вывода вида:
System.Console.WriteLine(…); |
|
До момента подробного обсуждения темы ввода-вывода в |
соответствующем |
разделе пособия, предложения этого вида можно рассматривать |
как некоторые |
“волшебные” заклинания, в результате которых в окошке консольного приложения появляются последовательности выводимых символов.
4
Введение
Обзор .NET. Основные понятия
ПЛАТФОРМА - это как минимум среда выполнения программ и… ещё что-либо, что определяет особенности разработки и выполнения программного кода – парадигмы программирования, языки программирования, множества базовых классов.
Microsoft.NET (.NET Framework) – программная платформа. Содержит следующие основные компоненты: the common language runtime (CLR) and the .NET Framework class library (.NET FCL).
CLS (Common Language Specification) – общая спецификация языков программирования. Это набор конструкций и ограничений, которые являются руководством для создателей библиотек и компиляторов в среде .NET Framework. Библиотеки, построенные в соответствии с CLS, могут быть использованы из любого языка программирования, поддерживающего CLS. Языки, соответствующие
CLS (к их числу относятся языки Visual C#, Visual Basic, Visual C++), могут интегрироваться друг с другом. CLS – это основа межъязыкового взаимодействия в рамках платформы Microsoft.NET.
CLR (Common Language Runtime) – Среда Времени Выполнения или Виртуальная Машина. Обеспечивает выполнение сборки. Основной компонент .NET Framework. Под Виртуальной Машиной понимают абстракцию инкапсулированной (обособленной) управляемой операционной системы высокого уровня, которая обеспечивает выполнение программного кода и предполагает решение следующих задач:
управление кодом (загрузку и выполнение),
управление памятью при размещении объектов,
изоляцию памяти приложений,
проверку безопасности кода,
преобразование промежуточного языка в машинный код,
доступ к метаданным (расширенная информация о типах),
обработка исключений, включая межъязыковые исключения,
взаимодействие между управляемым и неуправляемым кодом (в том числе и COMобъектами),
поддержка сервисов для разработки (профилирование, отладка и т.д.).
Короче, CLR – это набор служб, необходимых для выполнения сборки. При этом программный код сборки может быть как управляемым (код, при выполнении которого CLR, в частности, активизирует систему управления памяти), так и неуправляемым (“старый” программный код).
Сама CLR состоит из двух главных компонентов: ядра (mscoree.dll) и библиотеки базовых классов (mscorlib.dll). Наличие этих файлов на диске – верный признак того, что на компьютере, по крайней мере, была предпринята попытка установки платформы .NET.
Ядро среды выполнения реализовано в виде библиотеки mscoree.dll. При компоновке сборки в неё встраивается специальная информация, которая при запуске приложения (EXE) или при загрузке библиотеки (обращение к DLL из неуправляемого модуля – вызов функции LoadLibrary для загрузки управляемой сборки) приводит к загрузке и инициализации CLR. После загрузки CLR в адресное пространство процесса, ядро среды выполнения выполняет следующие действия:
находит местонахождение сборки,
загружает сборку в память,
производит анализ содержимого сборки (выявляет классы, структуры, интерфейсы),
производит анализ метаданных,
обеспечивает |
компиляцию |
кода |
на |
промежуточном |
языке |
(IL) |
в |
платформозависимые инструкции (ассемблерный код), |
|
|
|
||||
выполняет проверки, связанные с обеспечением безопасности,
используя основной поток приложения, передаёт управление преобразованному в команды процессора фрагменту кода сборки.
5
FCL (.NET Framework Class Library) – соответствующая CLS спецификации объектно-ориентированная библиотека классов, интерфейсов и системы типов (типов-значений), которые включаются в состав платформы Microsoft .NET.
Эта библиотека обеспечивает доступ к функциональным возможностям системы и предназначена в качестве основы при разработке .NET приложений, компонент, элементов управления.
.NET библиотека классов является вторым компонентом CLR.
.NET FCL могут использовать ВСЕ .NET-приложения, независимо от назначения, архитектуры, используемого при разработке языка программирования. В частности, содержит:
встроенные (элементарные) типы, представленные в виде классов (на платформе .NET всё построено на структурах или классах),
классы для разработки графического пользовательского интерфейса (Windows Form),
классы для разработки Web-приложений и Web-служб на основе технологии
ASP.NET (Web Forms),
классы для разработки XML и Internet-протоколами (FTP, HTTP, SMTP, SOAP),
классы для разработки приложений, работающих с базами данных (ADO.NET),
и многое другое.
.NET-приложение – приложение, разработанное для выполнения на платформе Microsoft.NET. Реализуется на языках программирования, соответствующих CLS.
MSIL (Microsoft Intermediate Language, он же IL – Intermedia Language) –
промежуточный язык платформы Microsoft.NET. Исходные тексты программ для .NET приложений пишутся на языках программирования, соответствующих спецификации CLS. Для языков программирования, соответствующих спецификации CLS может быть построен преобразователь в MSIL. Таким образом, программы на этих языках могут транслироваться в промежуточный код на MSIL. Благодаря соответствию CLS, в результате трансляции программного кода, написанного на разных языках, получается совместимый IL код.
Фактически MSIL является ассемблером виртуального процессора.
МЕТАДАННЫЕ - при преобразовании программного кода в MSIL также формируется блок МЕТАДАННЫХ, содержащий информацию о данных, используемых в программе. Фактически это наборы таблиц, содержащих информацию о типах данных, определяемых в модуле, о типах данных, на которые ссылается данный модуль. Ранее такая информация сохранялась отдельно. Например, приложение могло включать информацию об интерфейсах, которая описывалась на Interface Definition Language (IDL). Теперь метаданные являются частью управляемого модуля.
Вчастности, метаданные используются для:
сохранения информации о типах. При компиляции теперь не требуются заголовочные и библиотечные файлы. Всю необходимую информацию компилятор читает непосредственно из управляемых модулей,
верификации кода в процессе выполнения модуля,
управления динамической памятью (освобождение памяти) в процессе выполнения модуля,
при разработке программы стандартными инструментальными средствами (Microsoft Visual Studio.NET) на основе метаданных обеспечивается динамическая подсказка (IntelliSense).
Языки, для которых реализован перевод на MSIL: Visual Basic,
Visual C++,
Visual C#,
и ещё много других языков.
Исполняемый модуль - независимо от компилятора (и входного языка) результатом трансляции .NET приложения является управляемый исполняемый модуль (управляемый модуль). Это стандартный переносимый исполняемый (PE – Portable Executable) файл Windows.
Элементы управляемого модуля представлены в таблице.
6
Заголовок PE |
Показывает тип файла (например, DLL), содержит временную метку |
|
(время сборки файла), содержит сведения о процессорном коде. |
Заголовок CLR |
Содержит информацию для среды выполнения модуля (версию требуемой |
|
среды исполнения, характеристики метаданных, ресурсов и т.д.). |
|
Собственно эта информация делает модуль управляемым. |
Метаданные |
Таблицы метаданных: 1. типы, определённые в исходном коде, 2. типы, |
|
на которые имеются в коде ссылки. |
IL |
Собственно код, который создаётся компилятором при компиляции |
|
исходного кода. На основе IL в среде выполнения впоследствии |
|
формируется множество команд процессора. |
Управляемый модуль содержит управляемый код.
Управляемый код - это код, который выполняется в среде CLR. Код строится на основе объявляемых в исходном модуле структур и классов, содержащих объявления методов. Управляемому коду должен соответствовать определенный уровень информации (метаданных) для среды выполнения. Код C#, Visual Basic, и JScript является управляемым по умолчанию. Код Visual C++ не является управляемым по умолчанию, но компилятор может создавать управляемый код, для этого нужно указать аргумент в командной строке(/CLR). Одной из особенностей управляемого кода является наличие механизмов, которые позволяют работать с УПРАВЛЯЕМЫМИ ДАННЫМИ.
Управляемые данные - объекты, которые в ходе выполнения кода модуля размещаются в управляемой памяти (в управляемой куче) и уничтожаются сборщиком мусора CLR. Данные C#, Visual Basic и JScript .NET являются управляемыми по умолчанию. Данные C# также могут быть помечены как неуправляемые.
Сборка (Assembly) - базовый строительный блок приложения в .NET Framework. Управляемые модули объединяются в сборки. Сборка является логической группировкой одного или нескольких управляемых модулей или файлов ресурсов. Управляемые модули в составе сборок исполняются в Среде Времени Выполнения (CLR). Сборка может быть либо исполняемым приложением (при этом она размещается в файле с расширением .EXE), либо библиотечным модулем (в файле с расширением .DLL). При этом ничего общего с обычными (старого образца!) исполняемыми приложениями и библиотечными модулями сборка не имеет.
Декларация сборки (Manifest) - составная часть сборки. Ещё один набор таблиц метаданных, который:
идентифицирует сборку в виде текстового имени, её версию, культуру и цифровую сигнатуру (если сборка разделяется среди приложений),
определяет входящие в состав файлы (по имени и хэшу),
указывает типы и ресурсы, существующие в сборке, включая описание тех, которые экспортируются из сборки,
перечисляет зависимости от других сборок,
указывает набор прав, необходимых сборке для корректной работы.
Эта информация используется в период выполнения для поддержки корректной работы приложения.
Процессор НЕ МОЖЕТ выполнять IL код. И перевод IL кода осуществляется JITкомпилятором (just in time – в нужный момент), который активизируется CLR по мере необходимости и выполняется процессором. При этом результаты деятельности JIT-компилятора сохраняются в оперативной памяти. Между фрагментом оттранслированного IL кода и соответствующим блоком памяти устанавливается соответствие, которое в дальнейшем позволяет CLR передавать управление командам процессора, записанным в этом блоке памяти, минуя повторное обращение к JIT-компилятору.
В среде CLR допускается совместная работа и взаимодействие компонентов программного обеспечения, реализованных на различных языках программирования.
На основе ранее сформированного блока метаданных CLR обеспечивает ЭФФЕКТИВНОЕ взаимодействие выполняемых .NET приложений.
Для CLR все сборки одинаковы, независимо от того на каких языках программирования они были написаны. Главное – это чтобы они соответствовали CLS. Фактически CLR разрушает границы языков программирования (cross-language interoperability). Таким образом, благодаря CLS и CTS .NET-приложения фактически оказываются приложениями на MSIL (IL).
7
CLR берёт на себя решение многих проблем, которые традиционно находились в зоне особого внимания разработчиков приложений. К числу функций, выполняемых CLR, относятся:
проверка и динамическая (JIT) компиляция MSIL кода в команды процессора,
управление памятью, процессами и потоками,
организация взаимодействия процессов,
решение проблем безопасности (в рамках существующей в системе политики безопасности).
AppDomain (домен приложения) - это логический контейнер сборок, который используется для изоляции приложения в рамках адресного пространства процесса. Все объекты, создаваемые приложением, создаются в рамках определенного домена приложения. Несколько доменов приложений могут существовать в одном процессе операционной системы. CLR изолирует приложения, управляя памятью в рамках домена приложения.
Код, выполняемый в CLR (CLR процесс) отделён от других процессов, выполняемых на компьютере в это же самое время.
Обычный процесс запускается системой в рамках специально выделяемого процессу адресного пространства. CLR предоставляет возможность выполнения множества управляемых приложений в ОДНОМ ПРОЦЕССЕ. Каждое управляемое приложение связывается с собственным доменом приложения (сокращенно AppDomain). В приложении помимо основного домена может быть создано несколько дополнительных доменов.
Структура среды выполнения CLR представлена на картинке.
Код |
приложения |
.NET |
Компилятор .NET |
на |
одном из |
языков |
|
|
|||
программирования .NET |
|
||
|
Сборка в виде файлов |
IL |
и |
|||
|
DLL |
или |
EXE |
(Содержит |
||
|
Метаданные) |
|
|
|
|
|
Библиотеки |
базовых |
|
Ядро среды |
|
|
|
классов |
|
|
выполнения (mscoree.dll) |
|||
(mscorlib.dll и другие) |
|
|
|
|
|
|
|
Загрузчик |
|
|
|
|
|
|
JIT компилятор |
|
|
|
||
|
Инструкции ассемблера |
|
|
|||
|
ВЫПОЛНЕНИЕ ПРИЛОЖЕНИЯ |
|
|
|||
Свойства доменов:
домены изолированы друг от друга. Объекты, созданные в рамках одного домена недоступны из другого домена,
CLR способна выгружать домены вместе со всеми сборками, связанными с этими доменами,
возможна дополнительная конфигурация и защита доменов,
для обмена данными между доменами реализован специальный механизм безопасного доступа (маршалинг).
В .NET Framework разработана собственная компонентная модель, элементами которой являются .NET-сборки (.NET-assembly), а для прямой и обратной совместимости с моделью COM/COM+ в CLR встроены механизмы (COM Interop), обеспечивающие доступ к COM-объектам по правилам .NET и к .NET-сборкам по
8