Студопедия

Главная страница Случайная лекция


Мы поможем в написании ваших работ!

Порталы:

БиологияВойнаГеографияИнформатикаИскусствоИсторияКультураЛингвистикаМатематикаМедицинаОхрана трудаПолитикаПравоПсихологияРелигияТехникаФизикаФилософияЭкономика



Мы поможем в написании ваших работ!




Задание 2. В рассмотренном ранее примере событие не имело аргументов

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

Представьте себе банк, в который Вы приходите и говорите, что хотите открыть счет. Мы не будем вдаваться во все детали реальной жизни, поскольку ни к чему. Будем считать, что для открытия счета сума первого вноса должна состоять не меньше 0$. Если будет введена сума меньше 0$, возбудим событие. Так же, при наличии открытого счета, если будет сделана попытка снять больше денег, чем на счету, возбудим событие.

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

public delegate void MyDelegate(object user, SecurytyMonitor ment);

Первый параметр, это объект, который возбудил событие, второй параметр, это обьект класса SecurytyMonitor который унаследован от класса EventArgs. А вот и сам класс SecurytyMonitor:

В этом классе объявлено приватное поле message, которое, как будет потом показано, используется для хранения сообщения о том, что что-то произошло. По сути дела, это класс можно считать служебным.

Сообщение устанавливается в конструкторе, и получить его можно только через свойство только для чтения!

Теперь приступим к написанию класса Bank:

Первый параметр, это объект, который возбудил событие, второй параметр, это обьект класса SecurytyMonitor который унаследован от класса EventArgs.

В классе SecurytyMonitor объявлено событие OnStop и класс делегата описанный ранее. Как видим, что при создание счета, происходит проверка, прежде чем наполнить счет деньгами. Так же, в этом классе определен метод, который дает возможность снять деньги со счета. В этом методе проверяется наличие денег на счету и сума, которую указал объект. Если сума больше чем денег на счету, возбуждается событие! Как в первом случае при внесение денег на счет, так и во втором, при снятие со счета, вызывается метод DoEvent(Bank b) класса SecurytyMonitor, в который передается объект класса Bank, с помощью которого, мы доступаемся к событию OnStop класса Bank, и подписываем его на метод Display() класса SecurytyMonitor.

Вот клиентская часть Main():

Контрольные вопросы

1. Что такое события в языке C#?

2. Объясните синтаксис оператора посылки сообщения.

3. Проведите формат объявления события

4. Что такое переменная события?

5. Что определяет делегат, указанный в объявлении события?

6. Какие действия предусматривает подписка на события?

7. Назовите этапы работы с событиями.

 


<== предыдущая страница | следующая страница ==>
События. Для чего же существуют события | Измерение линейных размеров тел с помощью штангенциркуля и микрометра

Дата добавления: 2015-07-26; просмотров: 218; Нарушение авторских прав




Мы поможем в написании ваших работ!
lektsiopedia.org - Лекциопедия - 2013 год. | Страница сгенерирована за: 0.003 сек.