|
Программирование >> Программирование с использованием ajax
static void Main(string[] args) { Connection myConnection = new Connection(); Display myDisplay = new Display(); myConnection.MessageArrived += new MessageHandler(myDisplay.DisplayMessage); myConnection.Connect (); Console.ReadKey 0; Здесь после запуска процесса с помощью метода Connect () объекта Connection вызывается метод Console .ReadKey () для приостановки процесса обработки в Main (). Универсальные обработчики событий Делегат, который демонстрировался ранее для события Timer .Elapsed, содержал два параметра, которые являются параметрами очень часто встречающегося в обработчиках событий типа, а именно: □ object source - ссылка на объект, который сгенерировал событие; □ ElapsedEventArgs е - параметры, отправленные событием. Причина, по которой тип object используется в данном событии и на самом деле во многих других событиях, состоит в том, что очень часто требуется использовать один обработчик событий для нескольких идентичных событий, генерируемых разными объектами, и при этом все равно знать, какой конкретно объект сгенерировал данное событие. Чтобы лучше объяснить и проиллюстрировать это, в следующем практическом занятии предлагается немного расширить предыдущий пример. Практическое занятие Применение универсального обработчика событий 1. Создайте новое консольное приложение по имени СЫЗЕхО3 и сохраните его в каталоге С: \BegVCSharp\Chapterl3. 2. Скопируйте код из файлов Program.cs, Connection.cs и Display.cs проекта Chl3Ex02 и замените названия пространств имен в каждом из них с СЫЗЕх02 на СЫЗЕхОЗ. 3. Добавьте новый класс MessageArrivedEventArgs и измените код в представляющем его файле MessageArrivedEventArgs . cs следующим образом: namespace Chl3Ex03 { public class MessageArrivedEventArgs : EventArgs { private string message; public string Message { get { return message; 5. Измените содержимое файла Display. cs, как показано ниже: public void DisplayMessage(Connection source, MessageArrivedEventArgs e) { Console.WriteLine( Message arrived from: {0} , source.Name); Поступило новое сообщение Console.WriteLine( Message Text: {0} , e.Message); Вывод текста сообщения 6. В завершение измените код в файле Program, cs следующим образом: public MessageArrivedEventArgs() { message = No message sent. ; Сообщения не отправлялись public MessageArrivedEventArgs(string newMessage) { message = newMessage; 4. Измените код в файле Connection. cs следующим образом: namespace Chl3Ex03 { public delegate void MessageHandler (Connection source, MessageArrivedEventArgs e) ; public class Connection { public event MessageHandler MessageArrived; private string name; public string Name { get { return name; set { name = value; private void CheckForMessage(object source, EventArgs e) { Console.WriteLine( Checking for new messages. ); Проверка поступления новых сообщений if ((random.Next(9) ==0) && (MessageArrived !=null)) { MessageArrived (this, new MessageArrivedEventArgs ( Hello Mum! )) ; static void Main(string[] args) { Connection myConnectionl = new Connection(); myConnectionl.Name = First connection. ; Первое подключение Connection myConnection2 = new Connection(); myConnection2.Name = Second connection. ; Второе подключение Display myDisplay = new Display (); myConnectionl .MessageArrived += new MessageHandler (myDisplay. DisplayMessage); myConnection2.MessageArrived += new MessageHandler (myDisplay.DisplayMessage); myConnectionl.Connect(); myConnection2.Connect(); Console.ReadKey(); 7. Запустите приложение. На рис. 13.7 показан результат, который должен получиться. Рис. 13.7. Приложение ChlSExOS в действии Описание полученных результатов Путем отправки ссылки на генерирующий событие объект в виде одного из параметров обработчика событий можно настраивать ответ этого обработчика отдельным объектам. Эта ссылка открывает доступ к исходному объекту и его свойствам включительно. Отправкой параметров, содержащихся в классе, который наследуется от System. EventArgs (как это делает класс ElapsedEventArgs), можно предоставлять любую необходимую информацию (вроде параметра Message в классе MessageArrivedEventArgs). Вдобавок эти параметры будут выигрывать от полиморфизма. Например, обработчик для события MessageArrived можно было бы определить так: public void DisplayMessage(object source, EventArgs e) { Console.WriteLine( Message arrived from: {0} , ((Connection)source).Name); Console.WriteLine( Message Text: {0} , ((MessageArrivedEventArgs)e).Message);
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |