События
Конструктор сайтов - uCoz
Меню сайта


Поиск по сайту
Loading


Форма входа


Помощь проекту

PayPal:

LiqPay or Credit/Debit Card:

W1 "Единый кошелек":
199990419310
WebMoney:
WME - E509190786817
WMZ - Z195499640086
WMU - U204403357554
WMR - R280087882619




Активные темы

  • Все вопросы касающиеся Neil Scope (6444)
  • Заказ плат под NeilScope3 (12.2015) (59)
  • Первое знакомство с микроконтроллерами Silabs (105)
  • инвертор на микропроцессоре с 12\220v с синусом на выходе (2)
  • Куплю плату NS-3 (0)
  • Подскажите (0)
  • Осваиваем LPC2478... (1)
  • Мелкие вопросы по МК51 от SiLabs-a.. (40)
  • Детали для Neil Scope 2 (0)
  • NeiLogicAnalyzer (47)



  • Статистика

    Онлайн всего: 4
    Гостей: 4
    Пользователей: 0



    Рекомендуемые браузеры: Mozzilla, Google Chrome






    Приветствую Вас, Пробегающий мимо · RSS 18.11.2017, 19:19

    Основы C#. Урок 33. События

    На этом занятии мы с вами рассмотрим создание событий в C#. С помощью событий класс извещает, что в нем что-то произошло. События часто создаются в классах используемых для создания пользовательского интерфейса - например у кнопки есть событие, наступающее при щелчке на этой кнопке. События также могут присутствовать и в классах, не предназначенных для создания пользовательского интерфейча - например, они могут быть в классах консолького приложения. Именно для такого класса мы и рассмотрим создание события.

    События в C# основаны на делегатах. Это означает, что событие имеет тип определенного делегата. Вот пример класса с событием в нем:

    using System;
    namespace test
    {
     //Объявление делегата.
     delegate void EventHandler();
     //Объявление класса с событием.
     class MyEvent
     {
     //Объвление события на основе делегата.
     public event EventHandler f;
     //Объвление метода, в котором вызывается событие.
     public void func()
     {
     f();
     }
     }
     //Класс для тестирования события класса MyEvent.
     class Test
     {
     //Обработчик для события.
     public static void z()
     {
     Console.WriteLine("Вызов обработчика");
     }
     //Метод main.
     static void Main(string[] args)
     {
     //Создаем экземпляр класса с событием.
     MyEvent w=new MyEvent();
     //Добавление обработчика события.
     w.f+=new EventHandler(z);
     //Вызов метода, в котором вызывается событие.
     w.func();
     }
     }
    }

    Сначала мы в строке

     ...
     delegate void EventHandler();
     ...

    объявляем делегат. Параметров у него нет (хотя могут и быть), тип - void.

    Затем мы объявляем класс MyEvent, внутри которого объвляем событие f (имя произвольное):

     ...
     public event EventHandler f;
     ...

    Синтаксис тут такой - модификатор доступа (у нас public), затем ключевое слово event, потом имя делегата, на основании которого мы создаем наше событие (у нас это EventHandler) и, наконец, имя произольное событие (f). Обратите внимание, что событие появится на вкладке ClassView:

    Событие на вкладке ClassView

    Далее в нашем классе с событиями мы в некотором методе это событие вызываем:

     ...
     public void func()
     {
     f();
     }
     ...

    Класс с событием создан. Далее мы пишем класс Test для тестирования события. В этом классе мы создаем обработчик z для события (имя обработчика произвольное). Этот метод мы объвляем как статический.

    Далее мы объявляем экземпляр нашего класса MyEvent (того самого, в котором мы объявили событие):

     ...
     MyEvent w=new MyEvent();
     ...

    Остается теперь указать, что за обработчик будет у события f класса MyEvent. Это мы делаем в строке

     ...
     w.f+=new EventHandler(z);
     ...

    Этой строчкой мы указываем, что событие f будет обрабатывать метод z класса Test.

    Если мы запустим наше программу, то на вызовется обработчик для события (т. е. выведется надпись "Вызов обработчика"):

    Результат работы программы

    Обратите внимание, что обработчик для события мы пишем в тестовом классе (т. е. в классе Test, в котором мы объявили экземпляр нашего класса с событиями). Так мы делаем всегда, и не только на пратформе .NET.