Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Programmirovanie_otvety.docx
Скачиваний:
6
Добавлен:
26.04.2019
Размер:
314.27 Кб
Скачать

41. Оператор throw. Класс Exception. Примеры использования.

Для генерации исключения используется оператор throw с параметром, определяющим вид исключения. Параметр должен быть объектом, порожденным от стандартного класса System.Ехсерtion. Этот объект используется для передачи информации об исключении его обработчику.

Оператор throw употребляется либо с параметром, либо без него:

throw [ выражение ];

Форма без параметра применяется только внутри блока саtch для повторной генерации исключения. Тип выражения, стоящего после throw, определяет тип исключения, например:

throw new DividеВуZегоЕхсерtion( ) ;

Здесь после слова throw записано выражение, создающее объект стандартного класса «ошибка при делении на 0» с помощью операции new. При генерации исключения выполнение текущего блока прекращается и происходит поиск соответствующего обработчика с передачей ему управления. Обработчик считается найденным, если тип объекта, указанного после throw, либо тот же, что задан в параметре саtch, либо является производным от него.

Рассмотрим пример, в котором использован оператор throw для генерации программой исклячения DivideByZeroException.

Класс Ехсерtion содержит несколько полезных свойств (табл. 10.2), с помощью которых можно получить информацию об исключении.

Таблица 10.2 Свойства класса System.Exception

Свойство

Описание

НеlpLink

URL файла справки с описанием ошибки

Меssage

Текстовое описание ошибки. Устанавливается при создании объекта. Свойство доступно только для чтения

Source

Имя объекта или приложения, которое сгенерировало ошибку

StackTrace

Последовательность вызовов, которые привели к возникновению ошибки. Свойство доступно только для чтения

InnerException

Содержит ссылку на исключение, послужившее причиной генерации текущего исключения

TargetSite

Метод, выбросивший исключение

42. Классы: основные понятия. Члены классов. Спецификаторы доступа. Примеры использования.

Класс является основой языка С#, так как все действия в любой программе на этом языке происходят внутри класса. Все программы, использованные при изучении материала предыдущих тем или разработанные студентами самостоятельно, апеллируют к классам. Конечно, это были простые случаи использования классов. Вспомним, что все раннее разработанные программы содержали только один класс, с единственным методом: Main(). Не считая, разумеется, использования методов стандартных классов, таких как Math, Array и т.д.

Язык С# – объектно-ориентированный, а класс определяет основу объекта, его форму, его шаблон, по сути являющимся набором планов, по которым создаются экземпляры класса.

Класс является типом данных, определяемым пользователем. Он должен представлять собой единую логическую сущность, например, являться моделью реального объекта или процесса. Например, класс, где хранятся телефонные номера и список их владельцев, не должен содержать сведения о погоде. Элементами класса являются данные и функции, предназначенные для их обработки. Именно класс связывает данные с кодом. Хотя очень простые классы могут содержать только код, или только данные.

Общее определение класса:

[ атрибуты ] [ спецификаторы ] class имя_класса [ : предки ]

{тело_класса}

Обязательными являются только ключевое слово class, а также имя (заданное по общим правилам языка) и тело класса (список его членов), заключенное в фигурные скобки. Если класс не содержит ни одного члена, то список членов класса будет пустым. Например:

class Prim {}

При определении класса при необходимости могут быть указаны его предки (базовые классы), а также атрибуты и спецификаторы, определяющие различные характеристики класса. Как видно из определения класса, предки, атрибуты и спецификаторы класса являются необязательными элементами его определения и могут отсутствовать. Класс может быть определен внутри другого класса, в этом случае он является вложенным в другой класс.

Новое описание класса взамен унаследованного от предка в случае использования вложенных классов можно задать с помощью операции new.

Для других элементов программы возможна организация к членам класса различных типов доступа. Тип доступа определяется спецификаторами класса, приведенными в таблице 1.

Таблица1- Спецификаторы доступа класса

Спецификатор

Описание

1

  1. public

Доступ не ограничен.

2

  1. protected

Используется для вложенных классов. Доступ только из элементов данного и производных классов.

3

  1. internal

Доступ только из данной программы (сборки).

4

  1. protected internal

Доступ только из данного и производных классов или из данной программы (сборки).

5

  1. private

Используется для вложенных классов. Доступ только из элементов класса, внутри которого описан данный класс.

Спецификаторы доступа могут комбинироваться с другими спецификаторами.

Для классов, которые описываются непосредственно в пространстве имен, по умолчанию подразумевается спецификатор internal, при нем возможен доступ только из данной программы.

Для расширения доступа к членам класса существует вариант - спецификатор public, но его требуется указать явно. Спецификатор public открывает доступ к члену класса для любого кода программы.

Спецификатор private, наоборот, ограничивает доступ к члену класса только членами этого же класса.

Класс - это абстрактное понятие, определяющее характеристики и поведение некоторого множества экземпляров или объектов этого класса. В программе экземпляр класса может быть создан с помощью операции new:

Prim z = new Prim ();

Для каждого объекта при его создании в памяти выделяется отдельная область, в которой хранятся его данные.

В классе могут присутствовать статические элементы, которые существуют в единственном экземпляре для всех объектов класса. Часто статические данные называют данными класса, а остальные — данными экземпляра.

Для работы с данными класса используются методы класса (статические методы), для работы с данными экземпляра — методы экземпляра, или просто методы. Методы класса всегда хранятся в единственном экземпляре.

Ограничение доступа к членам класса является неотъемлемой частью объектно-ориентированного программирования, так как оно позволяет предотвратить неправильное использование объектов. Существует несколько общих принципов правильного применения открытого и закрытого доступа.

  • Члены класса, которые используются только внутри класса, должны быть закрытыми.

  • Данные экземпляра, которые должны находиться в пределах определенного диапазона, должны быть закрытыми, а доступ к ним должен быть реализован через открытые методы, которые могут проверять нахождение значений в пределах этого диапазона.

  • Если изменение члена может вызвать эффект, способный распространиться за его пределы, то он должен быть закрытым и доступ к нему должен быть контролируемым.

  • Члены, некорректное использование которых может повредить объект, должны быть закрытыми. Доступ к ним должен быть реализован через открытые методы, исключающие некорректное использование этих членов.

  • Методы, получающие значения закрытых данных, должны быть открытыми.

  • Переменные экземпляра могут быть открытыми, если нет необходимости делать их закрытыми.

Перечислены общие правила, которые, к сожалению, подчас приходится нарушать. Но в принципе, если им следовать, можно рассчитывать на получение устойчивых объектов.

Потенциал, заложенный в классах, очень велик. И прежде всего, его мощь определяется разнообразием членов класса:

  • Константы класса хранят неизменяемые значения, связанные с классом.

  • Поля содержат данные класса.

  • Методы реализуют вычисления или другие действия, выполняемые классом или экземпляром.

  • Свойства определяют характеристики класса вместе с методами их записи и чтения.

  • Конструкторы реализуют действия по инициализации экземпляров или класса в целом.

  • Деструкторы определяют действия, которые необходимо выполнить до того как объект будет уничтожен.

    • Индексаторы обеспечивают возможность доступа к элементам класса по их порядковому номеру.

  • Операции задают действия с объектами с помощью знаков операций.

  • События определяют уведомления, которые может генерировать класс.

  • Типы — это типы данных, внутренние по отношению к классу.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]