- •Классы. Создание экземпляров класса. Особенности перегрузки конструкторов
- •Классы: особенности инициализации полей, поля const и readonly
- •Статические элементы класса. Статический конструктор.
- •Индексаторы
- •Механизмы наследования. Объявление наследования.
- •Конструкторы производных и базовых классов. Использование ключевого слова base.
- •Скрытие наследуемых элементов.
- •Переопределение наследуемых элементов.
- •Полиморфное поведение производных классов.
- •Абстрактные методы и классы.
- •Интерфейсы. Операции is и as.
- •Разработка и использование интерфейсов.
- •Делегаты.
- •События. Правила использования стандартных делегатов.
События. Правила использования стандартных делегатов.
Событием называется особый элемент класса, с помощью которого он (или точнее – его объект) может посылать сообщения (уведомления) другим объектам об изменении своего состояния.
С помощью событий класс извещает, что в нем что-то произошло. Класс, отправляющий или вызывающий событие, называется источником, классы, принимающ. или обрабатывающие событие, называются получатели.
Класс – источник: Объявляет делегат (фактич. этим определяются тип и сигнатура обработчиков события); Объявляет событие; Определяет метод, иниц. событие;
Класс – получат: Определяет методы – обработчики события, сигнатура которых соответств типу делегата;
При этом до момента инициализ события, методы–обработчики должны быть зарегистр в событии.
Фактически, при объявлении события среда создаёт закрытый
статический класс, в котором находится экземпляр делегата операторные методы += и -= для добавления или удаления обработчиков. Тип этих операций void.
События имеют следующие свойства: Источник определяет момент вызова события, получатели определяют предпринятое ответное действие. У события может быть несколько получат; Получ. может обрабатывать несколько событий от нескольких издателей; События, не имеющие получат, никогда не возникают; Обычно события используются для оповещения о действиях пользователя, таких как нажатия кнопок или выбор меню и их пунктов в графическом пользовательском интерфейсе.
События в C# основаны на делегатах. Это означает, что событие имеет тип определенного делегата.
Синтаксис объявления: public delegate ИмяДелегата(Тип имя); //объявление делегата
class ИмяКласса { public event ИмяДелегата ИмяСобытия; } //класс – источник события
Событие – это поле типа Делегат, при объявлении это поле инициализируется значением – null.
В практическом программировании используют стандартные делегаты среды .NET, которые предназначены для обработки ситуаций, с помощью которых осуществляется управление программными системами и комплексами (события клавиатуры, мыши и т.д.). Для использования стандартных событий необходимо следовать правилам: 1) Имя делегата заканчивается суффиксом EventHandler ,event handler - обработчик события, а в технологии это делегат, инкапсулирующий ссылки на обработчиков событий;2) Делегат получает два параметра: первый – источник события (тип object); второй – аргументы события (тип EventArgs или производный от него – в случае, когда требуется дополнительная информация о событии); Если дополнительной информации о событии не требуется, можно не объявлять собственный делегат, а использовать стандартный класс делегата System.EventHandler.
3)Обычно ИмяОбработчикаСобытия = On + ИмяСобытия;
namespace test
{delegate void EventHandler(); //Объявление делегата.
class MyEvent //Объявление класса с событием.
{ //Объвление события на основе делегата.
public event EventHandler f;
//Объвление метода, в котором вызывается событие.
public void func() { f(); } }
class Test //Класс для тестир события класса MyEvent
{ public static void z() //Обработчик для события.
{Console.WriteLine("Вызов обработчика"); }
static void Main()
{ MyEvent w = new MyEvent();
w.f += new EventHandler(z); // событие f будет обрабатывать метод z класса Test.
w.func();//Вызов метода, в котором вызыв событие } } }
На экране: Вызов обработчика
Исключения. Операторы throw, catch, try.
Стандартные и пользовательские исключения.
Исключение — это ошибка, которая возникает во время выполнения программы. Используя С#-подсист обработки исключений, с такими ошибками можно справляться. Обработка исключений упрощает "работу над ошибками", позволяя в программах определять блок кода, именуемый обработчиком исключении, который будет автоматически выполняться при возникновении определенной ошибки. В этом случае не обязательно проверять результат выполнения каждой конкретной операции или метода вручную. Если ошибка возникнет, ее должным образом обработает обработчик исключений.
При возникновении особой, исключительной ситуации система создаёт специальный объект – исключение типа, соответствующего данной ситуации (говорят: выбрасывает исключение).
Информация, инкапсулированная в объекте – исключении, используется в блоке обработки этого исключения. Стандартными действиями (обработка по умолчанию) являются вывод диагностического сообщения и безопасное (для системы) завершение программы, при работе которой выброшено исключение; Особую гибкость механизму исключений обеспечивает возможность определения собственной обработки исключений (говорят: перехватить исключение). Исключения могут быть выброшены и программным образом.
Все типы исключений являются потомками одного специального класса Exception, определённого в пространстве имён System. Имеется большое количество системных исключений (DivideByZeroException, OutOfMemoryException, OverflowException и т.п.), также программист может разрабатывать собственные;
Для использования механизма исключений в языке C# имеются три оператора:
throw – генерация исключения; синтаксис использ:
throw ОбъектИсключение; //объект должен быть уже размещён в памяти или throw new = ТипИсключения();
После выполнения оператора throw дальнейшее выполнение блока кода прекращается, а управление передаётся обработчику данного исключения Оператор throw может быть использован и без аргументов – для повторной генерации того же исключения;
try – блок проверки на исключение;
Данный оператор определяет блок кода, в котором выполняется проверка на исключение. Обычно так выделяются фрагменты программы, потенциально опасные на предмет возникновения исключительных ситуаций. После блока try должны следовать блоки обработчиков исключений. В случае их отсутствия управление после генерации исключения передается обработчику по умолчанию.
catch - блок обработки исключения.
Оператор catch является, по сути дела, заголовком обработчика
исключения. Синтаксис использования: catch( Тип объект){блок кода} Тип используется для выбора обработчика: тип исключения,
выброшенный оператором throw должен полностью совпадать с типом, заданным в catch или быть производным от него. Собственно объект является входным аргументом для блока обработчика. Разновидностью catch является finally :
- не имеет входных аргументов;
- выполняется всегда (в том числе после любого обработчика
исключения).
Эти ключевые слова работают "в одной связке"; нельзя использовать слово try без catch или catch без try. Вот каков формат записи try/catch-блоков обработки исключений:
try {// Блок кода, подлежащий проверке на наличие ошибок.}
catch (Exception) {// Обработчик для исключения типа Exception}
C try-блоком может быть связана не одна, а несколько catch блоков. Какая именно из них будет выполнена, определит тип исключения.
По сути дела механизм исключений представляет собой альтернативный вариант возврата из методов, освобождая программиста от необходимости увеличения списка входных аргументов и входных проверок в каждой точке вызова/возврата.
class Исключения {public static void Main()
{int[] mas = new int[2];
try {for (int i = 0; i < 10; i++)
{mas[i] = i;
Console.WriteLine("nums[{0}]: {1}", i, mas[i]); } }
catch (Exception)
{Console.WriteLine("Индекс вне диапазона!"); } } }
На консоле:
nums[0]=0
nums[1]=1
Индекс вне диапазона!