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


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






Рекомендации по обработке событий в среде .NET Framework





В C# разрешается формировать какие угодно разновидности событий. Но ради совместимости программных компонентов со средой.NET Framework следует придерживаться рекомендаций, установленных для этой цели корпорацией Microsoft. Эти рекомендации, по существу, сводятся к следующему требованию: у обработчиков событий должны быть два параметра. Первый из них — ссылка на объект, формирующий событие, второй — параметр типа EventArgs, содержащий любую дополнительную информацию о событии, которая требуется обработчику. Таким образом,.NET-совместимые обработчики событий должны иметь следующую общую форму.

void обработчик(object отправитель,EventArgs е)

{

//...

}

Как правило, отправитель — это параметр, передаваемый вызывающим кодом с помощью ключевого слова this. А параметр е типа EventArgs содержит дополнительную информацию о событии и может быть проигнорирован, если он не нужен.

Сам класс EventArgs не содержит поля, которые могут быть использованы для передачи дополнительных данных обработчику. Напротив, EventArgs служит в качестве базового класса, от которого получается производньгй класс, содержащий все необходимые поля. Тем не менее в классе EventArgs имеется одно поле Empty типа static, которое представляет собой объект типа EventArgs без данных.

Ниже приведен пример программы, в которой формируется.NET-совместимое событие.

// Пример формирования.NET-совместимого события.

using System;

// Объявить класс, производный от класса EventArgs.

class MyEventArgs: EventArgs

{

public int EventNum;

}

// Объявить тип делегата для события.

delegate void MyEventHandler(object source, MyEventArgs arg);

// Объявить класс, содержащий событие.

class MyEvent

{

static int count = 0;

public event MyEventHandler SomeEvent;

// Этот метод запускает событие SomeEvent.

public void OnSomeEvent()

{

MyEventArgs arg = new MyEventArgs();

if (SomeEvent!= null)

{

arg.EventNum = count++;

SomeEvent(this, arg);

}

}

}

class X

{

public void Handler(object source, MyEventArgs arg)

{

Console.WriteLine("Событие " + arg.EventNum + " получено обьектом класса X.");

Console.WriteLine("Источник: " + source);

Console.WriteLine();

}

}

class Y

{

public void Handler(object source, MyEventArgs arg)

{

Console.WriteLine("Событие " + arg.EventNum +" получено объектом класса Y.");

Console.WriteLine("Источник: " + source);

Console.WriteLine();

}

}

class EventDemo6

{

static void Main()

{

X ob1 = new X();

Y ob2 = new Y();

MyEvent evt = new MyEvent();

// Добавить обработчик Handler() в цепочку событий.

evt.SomeEvent += ob1.Handler;

evt.SomeEvent += ob2.Handler;

//Запустить событие.

evt.OnSomeEvent();

evt.OnSomeEvent();

}

}

Событие 0 получено объектом класса X

Источник: MyEvent

 

Событие 0 получено объектом класса Y

Источник: MyEvent

 

Событие 1 получено объектом класса X

Источник: MyEvent

 

Событие 1 получено объектом класса Y

Источник: MyEvent

В данном примере создается класс MyEventArgs, производный от класса EventArgs. В классе MyEventArgs добавляется лишь одно его собственное поле: EventNum. Затем объявляется делегат MyEventHandler, принимающий два параметра, требующиеся для среды .NET Framework. Как пояснялось выше, первый параметр содержит ссылку на объект, формирующий событие, а второй параметр — ссылку на объект класса EventArgs или производного от него класса. Обработчики событий Handler(), определяемые в классах X и Y, принимают параметры тех же самых типов.

В классе MyEvent объявляется событие SomeEvent типа MyEventHandler. Это событие запускается в методе OnSomeEvent() с помощью делегата SomeEvent, которому в качестве первого аргумента передается ссылка this, а вторым аргументом служит экземпляр объекта типа MyEventArgs. Таким образом, делегату типа MyEventHandler передаются надлежащие аргументы в соответствии с требованиями совместимости со средой .NET.







Date: 2015-09-02; view: 427; Нарушение авторских прав



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