Компьютерные книги
Главное меню
Главная Поиск по сайту Добавить материал О нас Карта книг Карта сайта
Реклама
computersbooks.net -> Добавить материал -> Языки программирования -> Ватсон К. -> "С#" -> 129

С# - Ватсон К.

Ватсон К. С# — Лори, 2005 . — 879 c.
ISBN 1-861004-98-2
Скачать (прямая ссылка): vatsonc2005.pdf
Предыдущая << 1 .. 123 124 125 126 127 128 < 129 > 130 131 132 133 134 135 .. 404 >> Следующая


static void Main(string[] args)

(

Connection myConnection = new Connection));

Display myDisplay = new Display!);

myConnection.MessageArrived +=

new MessageHandler (myDisplay.DieplayMeeeage);

Reconnection.Connect()j

Console,ReadLine();

)

В данном случае, после того как аппарат работы с событиями запущен посредством обращения к методу Connect о объекта Connection, для приостановки выполнения функции Main() вызывается метод Console.ReadLine().
События

275

Многоцелевые обработчики событий

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

? object source — ссылка на объект, который вызвал наступление события

? ElapeedEventArgs в — параметры, передаваемые событием

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

Чтобы пояснить и проиллюстрировать это, следует несколько расширить предыдущий пример.

Практикум: Использование многоцелевого обработчика событий

1. Создайте новое консольное приложение с именем chi2Ex03 в директории C:\BegCSharp\Chapterl2\,

2. Скопируйте КОД О файлы Classl.cs, Connection.cs И Display.cs из соответствующих файлов в chi2Ex02 и убедитесь в том, что

во всех файлах изменены пространства имен с chi2Ex02 на смгвхоэ.

3. Добавьте новый класс — MessageArrivedEventArge, который находится в файле MessageArrivedEventArgs.cs;

using Systemj

namespace Chl2Ex03 ( . public class UessageArrivedEventArgs ; EventArge

private string messagei : .

public string Heseage {

get 1 ' .

(

return messaget

)

)

public MessageArrivedEventArgsО

¦ ( ........ - - -

message * 'Ho message sent.0i.

public HessageArrivedBventArgs{ string newHeseage) ( '

message ¦ пйийчнзаде; ' .

)

)

}
276 Глав а 12

4. Внесите следующие изменения в файл Connect ion. cs: namespace Chl2Ex03

1 ....... .........ММ | ШИ

public delegate void MeesageHandler(Connection source,

MeseageArrivedBveotArgs el i

public class Connection

t

public event MeesageHandler MessageArrived; private string name;

public string Dame (

get

{

return nonet -

)

eat

(

name ¦ value;

) .

)

private void CheckForMessage(object source, EventArgs e)

(

Console.KriteLine('Checking for new messages.');

Random random = new Random();

if ((random.Next(?) == 0) && (MessageArrived !=null))

{ '

MessageArrived(this, new MessageArriv«dEventArgs('Hello Mumi'))i

>

5. Внесите следующие изменения в файл Display.cs:

. public void DisplayHeBMge(Connection source, HessageArrivedEventArga e)

Console.fteiteLine ('Message arrived from: tO)', source .Наше) s Console.WriteLinet'Message Text: (0)', e.Message);

>

6. Внесите следующие изменения в файл ciassi.es:

static void Main(string 1] args)

Connection myConnectionl * new Connection ();

• nyConnectionl.Name ” 'First connection.';

Connection myConnection = new Connection 0 ; myConnection2.Name * 'Second connection.';

Display myDisplay " new Display!) i uiyCDnnectionl. Message Arrived +=

new HessageHeuidler (myDisplay.DisplayMessage) j myConnectionS.MeeeageArrivec >“

. new MeesageHandler(myDisplay .DisplayHessage)j

iqyConnectionl .Connect О; -

myConnectionS.Connect()j Console.ReadLine();

>
События

277

7. Запустите приложение (см, рис. слева).

Как это работает

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

Передавая параметры, содержащиеся в классе, который наследуется от System,EventArgs (как, например, ElapsedEventArga), мы получаем возможность передавать в качестве параметров (как, например, параметр Message в классе MessageArrivedEventArga) любую дополнительную информацию.

Кроме того, такие параметры позволяют использовать преимущество полиморфизма, Можно было бы определить обработчик события MessageArrived СЛвДуЮ-щим способом:

public void DisplayKeeeagetobject source, EventArgs e)

<

Console.WriteLine('Message arrived from: (0}*,

. ((Connection)source).Name);

Console.WriteLine('Message Text: (0)*,

((MessageArrivedEventArge)ej.Message)j

}

и видоизменить определение делегата в файле connection.cs таким образом: public delegate void KessegeHandler [object source, EventArgs e) г

Приложение будет выполняться в точности так же, как оно выполнялось н ранее, однако в этом случае функция DisplayMessageO стала более гибкой (по крайней мере в теории — для получения естественного продукта потребуется дополнительная реализация). Тот же самый обработчик событий мог бы работать н с другими событиями, такими как Timer .Elapsed, хотя для этого потребуется внести некоторые дополнительные изменения в тело обработчика, которые позволят ему должным образом обрабатывать параметры, передаваемые при наступлении события (в результате приведения их типа К типу объектов Connection И MessageArrived-EventArgs в данном случае возникнет исключительная ситуация и вместо этого следует использовать оператор аз).
Предыдущая << 1 .. 123 124 125 126 127 128 < 129 > 130 131 132 133 134 135 .. 404 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

Эком "Microsoft Excel 2000 шаг за шагом Русская версия самоучитель " (Самоучитель)

Поляков А.Ю. "Методы и алгоритмы компьютерной графики в примерах Vizual C++" (Графика)

Баяковский Ю.М. "Графическая библиотека Open GL " (Графика)

Валиков А. "Технология " (Языки программирования)
Авторские права © 2013 ComputersBooks. Все права защищены.