Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Obektno-orientirovannoe_programmirovanie.doc
Скачиваний:
14
Добавлен:
19.08.2019
Размер:
271.36 Кб
Скачать

15. Перечисляемые типы в c#.

Часто бывает удобным создать набор значимых имен, которые будут представлять числовые значения. С#, как и C/C++, предоставляет возможность использовать для этой цели перечисления (enumerations).

enum EmpType

{

Manager, // = 0

Grunt, // = 1

Contractor, // = 2

VP // = 3

}

По умолчанию в перечислениях С# первому элементу соответствует числовое значение 0, второму — n+1, третьему — n+2 и т. д. При необходимости можно изменить исходную точку отсчета. Для элементов перечисления вовсе не обязательно использовать строго последовательные числовые значения.

Компилятор попросту подставляет вместо элементов перечисления соответствующие числовые значения. По умолчанию для этих числовых значений компилятор использует тип данных Int. Можно использовать другой тип данных

enum EmpType:byte

{

Manager = 10,

Grunt = 1,

Contractor = 100,

VP = 99

}

Все перечисления в С# происходят от единого базового класса System. Enum. В этом базовом классе предусмотрены методы для работы с перечислениями.

Статический метод GetUnderlyingType() - позволяет получить информацию о том, какой тип данных используется для представления числовых значений элементов перечисления.

Статический метод GetValues() возвращает экземпляр System. Array, при этом каждому элементу массива будет соответствовать член указанного перечисления.

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

16. Перегрузка операторов в c#.

В С#, как и в любом другом языке программирования, предусмотрен набор специальных символов для выполнения самых распространенных операций с внутренними типами данных. Язык С# (подобно C++ и в противоположность Java) позволяет создавать пользовательские классы и структуры, которые будут реагировать по-своему (как мы определим) на те же самые встроенные операторы, например на оператор сложения «+». Этот прием называется перегрузкой операторов.

Перегруженные операторы — это всего лишь более дружественная по отношению к пользователю класса разновидность открытого метода. Кроме того, не следует забывать о несовместимости этого средства с Common Language Specification. Поэтому при создании пользовательских классов, предназначенных для работы в реальных рабочих приложениях, всегда снабжайте перегруженные операторы обычными методам их аналогами. Можно передавать вызовы от перегруженного оператора обычному методу.

public class Point

{

public static Point operator + (Point pi. Point p2)

{return AddPointsCpl. p2);}

public static Point AddPoints (Point pi, Point p2)

{return new Pointtpl.x + p2.x. pi. у + p2.y);}

}

17. Исключительные ситуации в c#.

float Div (float a, float b)

{ return a/b; } //ошибка времени выполнения

Exceptions. В платформу .NET заложен единый механизм обнаружения ошибок времени выполнения и передача сообщений о них. Он называется структурированная обработка исключений (Structured Exception Handing). Преимущество данного механизма в том, что он применим для всех .NET совместимых языков. Исключение – это объект класса System.Exception. Для наиболее типичных видов исключительных ситуаций уже предусмотрены свои типы исключений. Сущ. возможность создавать пользовательские исключения. Обработка исключений состоит из двух частей: генерация исключения, перехват исключения.

Для генерации исключений использ. кл. слово throw. После него следует объект исключения. Он Мб создан либо заранее, либо в момент генерации исключения.

Exception e = new Exception();

throw e;

Для перехвата исключений потенциально опасная операция помещается внутрь блока try.

За блоком try следует 1 или более блоков catch. После кл. слова catch в () следует указание класса исключения, которое данный блок может обрабатывать. В случае необходимости после имени класса идет название объекта, в который будет передана инфа о возникшей ситуации. Можно использовать блок catch вообще без параметров. Он перехватывает все возникшие исключения. Более конкретный блок catch должен идти раньше, чем общий.

try {…}

catch (System.Exception) {…}

catch (Exception) {…}

catch {…}

Последним в этой конструкции мб блок finaly. Он выполняется в любом случае, не зависимо от того, возникло исключение или нет.