- •Введение в 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
- •Использование интерфейсов в качестве параметров
- •Использование интерфейсов в качестве возвращаемых значений
- •Массивы интерфейсных типов
- •Явная реализация интерфейсов
- •Проектирование иерархий интерфейсов
- •Множественное наследование посредством интерфейсных типов
Строительные блоки обработки исключений в .Net
Программирование со структурированной обработкой исключений предусматривает использование четырех связанных между собой сущностей:
тип класса, который представляет детали исключения;
член, способный генерировать экземпляр класса исключения в вызывающем коде при соответствующих обстоятельствах;
блок кода на вызывающей стороне, обращающийся к члену, в котором может возникнуть исключение;
блок кода на вызывающей стороне, который будет обрабатывать (или перехватывать) исключение в случае его возникновения.
Язык программирования C# предлагает четыре ключевых слова (try, catch, throw и finally), которые позволяют генерировать и обрабатывать исключения. Объект, который представляет текущую проблему, относится к классу, расширяющему System. Exception (или производный от него класс). С учетом этого давайте сначала рассмотрим роль этого базового класса, связанного с исключениями.
Базовый класс System.Exception
Все
исключения в конечном итоге порождены
от базового класса System.Exception, который,
в свою очередь, является производным
от System.Object. Ниже показана основная
часть этого класса (обратите внимание,
что некоторые его члены являются
виртуальными и, следовательно, могут
быть переопределены в производных
классах):
Как видите,
многие свойства System.Exception по своей
природе являются доступными только
для чтения. Это объясняется тем, что
стандартные значения для каждого из
них обычно поставляются производными
типами. Например, стандартное сообщение
типа IndexOutOfRangeException
выглядит так: “Index was
outside the
bounds of the
array” (“Индекс вышел за границы массива”).
Простейший пример
Для
демонстрации пользы от структурированной
обработки исключений мы должны
создать класс, который будет генерировать
исключение в надлежащих (или, можно
сказать, исключительных) обстоятельствах.
Создадим новый проект консольного
приложения на C# по имени SimpleException и
определим в нем два класса (Саr (автомобиль)
и Radio (радиоприемник)), связав их между
собой отношением “имеет”. В классе
Radio определен единственный метод,
отвечающий за включение и выключение
радиоприемника:
В дополнение к использованию класса Radio через включение/делегацию, класс Саr (код которого показан ниже) определен так, что когда пользователь превышает предопределенную максимальную скорость (заданную с помощью константного члена MaxSpeed), двигатель выходит из строя, приводя объект Саr в нерабочее состояние (что отражается закрытой переменной-членом типа bool по имени carIsDead). Кроме того, класс Саr имеет несколько свойств для представления текущей скорости и указанного пользователем “дружественного названия” автомобиля, а также различные конструкторы для установки состояния нового объекта Саr.
Создайте проект и реализуйте классы для радио и авто
Теперь
реализуем метод Main(), в котором объект
Саr будет превышать заданную максимальную
скорость (установленную в 100 в классе
Саr):
Вывод будет
выглядеть следующим образом:
