- •2.Основные понятия объектно-ориентированного программирования — класс, объект, поле, метод, свойство.
- •4.Конструкторы и деструкторы. Функциональное назначение. Виды конструкторов.
- •5.Объекты и их жизненный цикл. Создание и уничтожение объектов.
- •6. Инкапсуляция. Определение. Функциональное назначение. Реализация. Примеры применения
- •7 Инкапсуляция. Свойства. Функциональное назначение. Реализация. Создание индексатора. Примеры применения.
- •8.Инкапсуляция. Скрытие членов класса. Функциональное назначение. Реализация. Примеры применения.
- •9.Наследование. Функциональное назначение. Реализация. Примеры применения.
- •10.Наследование. Конструктор по умолчанию. Назначение.
- •13. Методы. Определение. Функциональное назначение. Способы реализации. Примеры применения.
- •14.Полиморфизм. Функциональное назначение. Способы реализации. Примеры применения.
- •15.Перегрузка методов. Функциональное назначение. Способ реализации. Примеры применения.
- •16.Виртуальные методы. Функциональное назначение. Примеры применения.
- •17.Перегрузка операций. Функциональное назначение. Способ реализации. Примеры применения.
- •19.Исключительные ситуации. Понятие. Способы обработки исключительных ситуаций. Примеры применения.
- •20.Интерфейсы. Функциональное назначение. Иерархия интерфейсов. Множественное наследование: проблемы и способы их разрешения.
- •Interface имя{ тип_возврата имя_метода1 {список_параметров) ;
- •Void iProps.Prop3() { Console.WriteLine("Свойство 3 интерфейса 1"); }
- •Void iPropsOne.Prop3() { Console.WriteLine("Свойство 3 интерфейса 2"); }
- •21. Структуры (struct) и перечисления (enum). Отличия структур от классов.
- •1 RedDel имеет значение 2
- •Концепция типа данных. Встроенные типы данных и их реализация в языке с#
- •Концепция типа данных. Соглашения о совместимости и приведение типов
- •Концепция типа данных. Числовые типы данных.
- •Концепция типа данных. Символьные типы данных.
- •Концепция типа данных. Составные типы данных. Массивы и их реализация в с#. Структуры.
- •Концепция типа данных. Явное и неявное преобразование типов.
- •7. Концепция типа данных. Определение собственных типов данных.
- •Концепция типа данных. Значащие (размерные) (Value type) и ссылочные (Reference type) типы данных. Упаковка и распаковка (Boxing, Unboxing).
- •Концепция типа данных. Переменные и константы и их реализация в с#.
- •10. Принцип модульности программ. Глобальные и локальные имена. Область видимости имен. Выбор области видимости.
- •11. Принцип модульности программ. Метод, как отдельный модуль программы. Интерфейсная и скрытая часть метода. Формальные и фактические параметры метода. Примеры применения.
- •12. Унарные и мультипликативные операции. Примеры применений.
- •13. Аддитивные и сдвиговые операции. Примеры применений.
- •14. Операции отношения и действий над типами данных. Примеры применений.
- •If (a is a) Console.WriteLine("Объект а имеет тип a.");
- •If(b is в) Console.WriteLine("Объект b имеет тип в."); if(a is object) Console.WriteLine("а — это объект."); }}
- •15. Логические операции. Примеры применений.
- •16. Организация циклов в с#. Примеры применений.
- •17. Операторы перехода и оператор присваивания.
- •18. Операторы условного перехода. Примеры применений.
19.Исключительные ситуации. Понятие. Способы обработки исключительных ситуаций. Примеры применения.
Корректность и устойчивость - два основных качества программной системы, без которых все остальные ее достоинства не имеют особого смысла. Корректность - это способность программной системы работать в строгом соответствии со своей спецификацией. Отладка - процесс, направленный на достижение корректности.
Во время работы системы могут возникать ситуации, выходящие за пределы, предусмотренные спецификацией. Такие ситуации называются исключительными. Устойчивость - это способность программной системы должным образом реагировать на исключительные ситуации. Обработка исключительных ситуаций - процесс, направленный на достижение устойчивости.
Исключительная ситуация (или исключение) — это ошибка, которая возникает во время выполнения программы. Используя С#-подсистему обработки исключительных ситуаций, с такими ошибками можно справляться. Преимущество подсистемы обработки исключений состоит в автоматизации создания большей части кода, который ранее необходимо было вводить в программы "вручную". Обработка исключений упрощает "работу над ошибками", позволяя в программах определять блок кода, именуемый обработчиком исключение, который будет автоматически выполняться при возникновении определенной ошибки. В этом случае не обязательно проверять результат выполнения каждой конкретной операции или метода вручную. Если ошибка возникнет, ее должным образом обработает обработчик исключений. Еще одним преимуществом обработки исключительных ситуаций в С# является определение стандартных исключений для таких распространенных программных ошибок, как деление на нуль или попадание вне диапазона определения индекса. В С# исключения представляются классами. Все классы исключений должны быть выведены из встроенного класса исключений Exception, который является частью пространства имен System. Таким образом, все исключения — подклассы класса Exception.
С# определяет встроенные исключения, которые выводятся из класса SystemException. Например, при попытке выполнить деление на нуль генерируется исключение класса DivideByZeroException. Но можно создавать собственные классы исключений, выводя их из класса ApplicationException.
Основы обработки исключений
Управление С#-механизмом обработки исключений зиждется на четырех ключевых словах: try, catch, throw и finally. Они образуют взаимосвязанную подсистему, в которой использование одного из них предполагает использование другого. Программные инструкции, которые нужно проконтролировать на предмет исключений, помещаются в try-блок. Если исключение таки возникает в этом блоке, оно дает знать о себе выбросом определенного рода информации. Это выброшенное исключение может быть перехвачено программным путем с помощью catch-блока и обработано соответствующим образом. Системные исключения автоматически генерируются С#-системой динамического управления. Чтобы сгенерировать исключение вручную, используется ключевое слово throw. Любой код, который должен быть обязательно выполнен при выходе из try-блока, помещается в блок finally.
Ядром обработки исключений являются блоки try и catch. Эти ключевые слова работают "в одной связке"; нельзя использовать слово try без catch или catch без try. Вот каков формат записи try/catch-блоков обработки исключений:
t r y { // Блок кода, подлежащий проверке на наличие ошибок. }
catch (ExcepType1 exOb) {// Обработчик для исключения типа ExcepTypel. }
catch (ExcepType2 exOb) { // Обработчик для исключения типа ЕхсерТуре2. }
Здесь ЕхсерТуре — это тип сгенерированного исключения. После "выброса" исключение перехватывается соответствующей инструкцией catch, которая его обрабатывает. Как видно из формата записи try/catch-блоков, с try-блоком может быть связана не одна, а несколько catch-инструкций. Какая именно из них будет выполнена, определит тип исключения. Другими словами, будет выполнена та catch-инструкция, тип исключения которой совпадает с типом сгенерированного исключения (а все остальные будут проигнорированы). После перехвата исключения параметр ехОb примет его значение.
Задавать параметр ехОb необязательно. Если обработчику исключения не нужен доступ к объекту исключения (как это часто бывает), в задании параметра ехОb нет необходимости. Если исключение не генерируется, try-блок завершается нормально, и все его catch-инструкции игнорируются. Выполнение программы продолжается с первой инструкции, которая стоит после последней инструкции catch. Таким образом, catch-инструкция (из предложенных после try-блока) выполняется только в случае, если сгенерировано соответствующее исключение.
Пример обработки исключения
Известно, что попытка индексировать массив за пределами его границ вызывает ошибку нарушения диапазона. В этом случае С#-система динамического управления генерирует исключение типа IndexOutOfRangeException, которое представляет собой стандартное исключение, определенное языком С#. Демонстрация обработки исключений:
int [ ] nums = new int [ 4 ] ;
try { // Генерируем исключение, связанное с попаданием индекса вне диапазона
for(int i=0; i < 10; i++) { nums[i] = i; } }
catch (IndexOutOfRangeException) {// Перехватываем исключение.
Console.WriteLine("Индекс вне диапазона!"); }
Обратите внимание на то, что nums — это int-массив для хранения четырех элементов. Однако в цикле for делается попытка индексировать этот массив от 0 до 9, и как только значение индекса устанавливается равным четырем, генерируется исключение типа IndexOutOfRangeException.
Во-первых, проверяемый код содержится внутри try-блока. Во-вторых, при возникновении исключения (в данном случае из-за попытки внутри for-цикла индексировать массив nums за границами его диапазона) выполнение try-блока прекращается, а само исключение перехватывается catch-инструкцией. Другими словами, управление программой передается catch-инструкции, независимо от того, все ли инструкции try-блока выполнились. При этом важно то, что инструкция catch не вызывается, а ей передается управление программой.
После выполнения catch-инструкции программа продолжится со следующей инструкции. Следовательно, чтобы ваша программа могла нормально продолжить свое выполнение, обработчик должен устранить проблему, которая стала причиной возникновения исключительной ситуации.
В инструкции catch параметр отсутствует, параметр необходим только в тех случаях, когда требуется доступ к объекту исключения. В некоторых случаях значение объекта исключения используется обработчиком для получения дополнительной информации об ошибке, но чаще всего достаточно просто знать о том, что исключение имело место. Следовательно, в отсутствии catch-параметра в обработчике исключения нет ничего необычного.
Однако можно сгенерировать исключение вручную, используя инструкцию throw. Формат ее записан таков: throw exceptOb;
Элемент exceptOb — это объект класса исключений, производного от класса Exception.
Пример генерирование исключения вручную:
try {Console.WriteLine("До генерирования исключения.");
throw new DivideByZeroException(); }
catch (DivideByZeroException) {// Перехватываемисключение.
Console.WriteLine("Исключение перехвачено."); }
Объект исключения типа DivideByZeroException был создан с помощью оператора new в инструкции throw. Инструкция throw генерирует объект.
Иногда возникает потребность определить программный блок, который должен выполняться по выходу из try/catch-блока. Например, исключение может вызвать ошибку, которая завершает текущий метод и, следовательно, является причиной преждевременного возврата. Однако такой метод может оставить открытым файл или соединение с сетью, которые необходимо закрыть. Подобные обстоятельства — обычное явление в программировании, и С# предоставляет удобный путь выхода из них: блок finally.
Чтобы определить блок кода, подлежащий выполнению по выходу из try/catch-блока, включите в конец try/catch-последовательности блок finally. Общая форма записи последовательности try/catch-блоков, содержащей блок finally, выглядит следующим образом:
try {// Блок кода, предназначенный для обработки ошибок. }
catch (ExcepTypel exOb) { //Обработчик для исключения типа ExcepTypel. }
catch (ЕхсерТуре2 ехОb) { // Обработчик для исключения типа ЕхсерТуре2. }
finally {// Код завершения обработки исключений.}
Блок finally будет выполнен после выхода из try/catch-блока, независимо от условий его выполнения. Другими словами, при нормальном завершении try-блока или в условиях возникновения исключения содержимое finally-блока будет безусловно отработано. Блок finally выполнится и в том случае, если любой код внутри try-блока или любая из его catch-инструкций определены внутри метода.
