- •Введение в c# и платформу .Net Философия .Net
- •Введение в строительные блоки платформы .Net (clr, cts и cls)
- •Роль библиотек базовых классов
- •Понятие общей системы типов (cts)
- •Понятие общеязыковой спецификации (cls)
- •Понятие общеязыковой исполняющей среды (clr)
- •Различия между сборками, пространствами имен и типами
- •Лабораторная работа №1. Создание приложений на языке c# без использования ide Роль .Net Framework 4.5 sdk
- •Указание целевых входных и выходных параметров
- •Ссылка на внешние сборки
- •Построение приложений c# с использованием csc.Ехе
- •Компиляция нескольких файлов исходного кода
- •Лабораторная работа №2. Построение приложений .Net с помощью Visual Studio Создание нового проекта
- •Использование утилиты Solution Explorer
- •Ссылка на внешние сборки
- •Утилита Object Browser
- •Фрагменты кода и технология Surround With
- •Утилита Class Designer
- •Лабораторная работа №3. Основы программирования на c# Структура простой программы c#
- •Класс System.Console
- •Форматирование числовых данных
- •Системные типы данных и соответствующие ключевые слова c#
- •Объявление и инициализация переменных
- •Иерархия классов для типов данных
- •Члены числовых типов данных
- •Члены System.Boolean
- •Члены System.Char
- •Работа со строковыми данными
- •Базовые манипуляции строками
- •Управляющие последовательности
- •Итерационные конструкции c#
- •Лабораторная работа №4. Главные конструкции программирования на с# Методы и модификаторы параметров
- •Стандартное поведение передачи параметров по значению
- •Модификатор out
- •Модификатор ref
- •Модификатор params
- •Определение необязательных параметров
- •Вызов методов с использованием именованных параметров
- •Массивы в c# Объявление и инициализация массивов
- •Определение массива объектов
- •Базовый класс System.Array
- •Управление хранилищем, лежащим в основе перечисления
- •Объявление переменных типа перечисления
- •Динамическое извлечение пар “имя/значение” перечисления
- •Типы структур
- •Объектно- ориентированное программирование на c# Лабораторная работа №5. Работа с классами Знакомство с типом класса c#
- •Размещение объектов с помощью ключевого слова new
- •Определение специальных конструкторов
- •Роль ключевого слова this
- •Еще раз о необязательных аргументах
- •Понятие ключевого слова static
- •Определение статических полей данных
- •Определение статических классов
- •Основные принципы объектно-ориентированного программирования
- •Роль инкапсуляции
- •Роль наследования
- •Роль полиморфизма
- •Лабораторная работа №6. Инкапсуляция Модификаторы доступа c#
- •Стандартные модификаторы доступа
- •Первый принцип: службы инкапсуляции c#
- •Инкапсуляция с использованием традиционных методов доступа и изменения
- •Использование свойств внутри определения класса
- •Свойства, доступные только для чтения и только для записи
- •Взаимодействие с автоматическими свойствами
- •Понятие синтаксиса инициализации объектов
- •Работа с данными константных полей
- •Понятие полей, допускающих только чтение
- •Понятие частичных типов
- •Лабораторная работа №7. Наследование Базовый механизм наследования
- •Указание родительского класса для существующего класса
- •Ключевое слово sealed
- •Управление созданием базового класса с помощью ключевого слова base
- •Хранение секретов семейства: ключевое слово protected
- •Добавление запечатанного класса
- •Реализация модели включения/делегации
- •Определения вложенных типов
- •Лабораторная работа №8. Полиморфизм
- •Переопределение виртуальных членов в ide-среде Visual Studio
- •Запечатывание виртуальных членов
- •Абстрактные классы
- •Понятие полиморфного интерфейса
- •Сокрытие членов
- •Правила приведения к базовому и производному классу
- •Ключевое слово as
- •Ключевое слово is
- •Главный родительский класс System.Object
- •Переопределение System.Object.ToString()
- •Переопределение System.Object.Equals()
- •Статические члены System.Object
- •Лабораторная работа №9. Структурированная обработка исключений
- •Роль обработки исключений .Net
- •Строительные блоки обработки исключений в .Net
- •Базовый класс System.Exception
- •Простейший пример
- •Генерация общего исключения
- •Перехват исключений
- •Конфигурирование состояния исключения
- •Исключения уровня приложения (System.ApplicationException)
- •Построение специальных исключений, способ первый
- •Построение специальных исключений, способ второй
- •Обработка нескольких исключений
- •Общие операторы catch
- •Внутренние исключения
- •Какие исключения могут генерировать методы?
- •Результат наличия необработанных исключений
- •Лабораторная работа №10. Работа с интерфейсами Понятие интерфейсных типов
- •Реализация интерфейса
- •Вызов членов интерфейса на уровне объектов
- •Получение ссылок на интерфейсы: ключевое слово as
- •Получение ссылок на интерфейсы: ключевое слово is
- •Использование интерфейсов в качестве параметров
- •Использование интерфейсов в качестве возвращаемых значений
- •Массивы интерфейсных типов
- •Явная реализация интерфейсов
- •Проектирование иерархий интерфейсов
- •Множественное наследование посредством интерфейсных типов
Понятие общеязыковой спецификации (cls)
Спецификация CLS — это набор правил, подробно описывающих минимальное и полное множество характеристик, которые должен поддерживать отдельный компилятор .NET, чтобы генерировать программный код, обслуживаемый средой CLR и в то же время доступный в унифицированной манере всем языкам, ориентированным на платформу .NET. Во многих отношениях CLS можно рассматривать как подмножество полной функциональности, определяемой CTS. В конечном итоге CLS является набором правил, которых должны придерживаться создатели компиляторов при желании, чтобы их продукты могли гладко функционировать в мире .NET. Каждое правило имеет простое название (например, “Правило номер 6”), и каждое правило описывает воздействие на тех, кто создает компиляторы, и на тех, кто (каким-либо образом) взаимодействует с ними. Наиболее важным в CLS является правило номер 1.
Правило номер 1. Правила CLS применяются только к тем частям типа, которые видны извне определяющей сборки. Из этого правила можно сделать корректный вывод о том, что остальные правила CLS не применяются к логике, используемой для построения внутренних рабочих деталей типа .NET. Единственными аспектами типа, которые должны соответствовать CLS, являются сами определения членов (т.е. соглашения об именовании, параметры и возвращаемые типы). Логика реализации члена может применять любое количество приемов, не согласованных с CLS, т.к. для внешнего мира это не играет никакой роли.
Понятие общеязыковой исполняющей среды (clr)
Помимо спецификаций CTS и CLS, для получения общей картины на данный момент осталось рассмотреть еще одну аббревиатуру — CLR. С точки зрения программирования под термином исполняющая среда может пониматься коллекция служб, которые требуются для выполнения скомпилированной единицы кода. Например, когда разработчики на Java развертывают программное обеспечение на новом компьютере, они должны удостовериться в том, что на компьютере установлена виртуальная машина Java (Java Virtual Machine — JVM), которая сделает возможным выполнение их программного обеспечения.
Платформа .NET предлагает еще одну исполняющую среду. Ключевая разница между исполняющей средой .NET и упомянутыми выше средами состоит в том, что исполняющая среда .NET обеспечивает единый четко определенный уровень выполнения, который разделяется всеми языками и платформами, ориентированными на .NET.
Рис. 3. Сборка mscoree.dll в действии
Основной механизм CLR физически имеет вид библиотеки по имени mscoree.dll (также известной как общий механизм выполнения исполняемого кода объектов (Common Object Runtime Execution Engine)). Когда на сборку производится ссылка с целью ее использования, библиотека mscoree.dll загружается автоматически и, в свою очередь, загружает требуемую сборку в память. Исполняющая среда отвечает за решение множества задач. Первая и наиглавнейшая задача — определение местоположения сборки и нахождение запрошенного типа в двоичном файле за счет чтения содержащихся в нем метаданных. Затем CLR размещает тип в памяти, преобразует связанный с ним CIL-код в специфичные для платформы инструкции, производит все необходимые проверки безопасности и после этого выполняет нужный код.
