Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Методами в качестве обработчиков событий
Методы экземпляра и статические методы могут быть использованы в качестве обработчиков событий, но между ними имеется одно существенное отличие. Когда статический метод используется в качестве обработчика, уведомление о событии распространяется на весь класс. А когда в качестве обработчика используется метод экземпляра, то события адресуются конкретным экземплярам объектов. Следовательно, каждый объект определенного класса, которому требуется получить уведомление о событии, должен быть зарегистрирован отдельно. На практике большинство обработчиков событий представляет собой методы экземпляра, хотя это, конечно, зависит от конкретного приложения. Рассмотрим применение каждой из этих двух разновидностей методов в качестве обработчиков событий на конкретных примерах. В приведенной ниже программе создается класс X, в котором метод экземпляра определяется в качестве обработчика событий. Это означает, что каждый объект класса X должен быть зарегистрирован отдельно, чтобы получать уведомления о событиях. Для демонстрации этого факта в данной программе производится групповая адресация события трем отдельным объектам класса X. /* Уведомления о событиях получают отдельные объекты, когда метод экземпляра используется в качестве обработчика событий. */ using System; // Объявить тип делегата для события. delegate void MyEventHandler(); // Объявить класс, содержащий событие. class MyEvent { public event MyEventHandler SomeEvent; // Этот метод вызывается для запуска события. public void OnSomeEvent() { if (SomeEvent!= null) SomeEvent(); } } class X { int id; public X(int x) { id = x; } // Этот метод вызывается для запуска события. public void Xhandler() { Console.WriteLine("Событие получено обьектом " + id); } } class EventDemo3 { static void Main() { MyEvent evt = new MyEvent(); X o1 = new X(1); X o2 = new X(2); X o3 = new X(3); evt.SomeEvent += o1.Xhandler; evt.SomeEvent += o2.Xhandler; evt.SomeEvent += o3.Xhandler; //Запустить событие. evt.OnSomeEvent(); } } Событие получено объектом 1 Событие получено объектом 2 Событие получено объектом 3 Как следует из результата выполнения кода из приведенного выше примера, каждый объект должен зарегистрировать свой интерес в событии отдельно, и тогда он будет получать отдельное уведомление о событии. С другой стороны, когда в качестве обработчика событий используется статический метод, события обрабатываются независимо от какого-либо объекта, как демонстрируется в приведенном ниже примере программы. /* Уведомления о событии получает класс, когда статический метод используется в качестве обработчика событий. */ using System; //Объявить тип делегата для события. delegate void MyEventHandler(); // Объявить класс, содержащий событие. class MyEvent { public event MyEventHandler SomeEvent; // Этот метод вызывается для запуска события. public void OnSomeEvent() { if (SomeEvent!= null) SomeEvent(); } } class X { /* Этот статический метод предназначен в качестве обработчика событий. */ public static void Xhandler() { Console.WriteLine("Событие получено классом."); } } class EventDemo4 { static void Main() { MyEvent evt = new MyEvent(); evt.SomeEvent += X.Xhandler; // Запустить событие. evt.OnSomeEvent(); } } Событие получено классом. Обратите в данном примере внимание на то, что объекты класса X вообще не создаются. Но поскольку Xhandler() является статическим методом класса X, то он может быть привязан к событию SomeEvent и выполнен при вызове метода OnSomeEvent(). Date: 2015-09-02; view: 414; Нарушение авторских прав |