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


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 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; Нарушение авторских прав



mydocx.ru - 2015-2024 year. (0.007 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию