Класс EventArgs
необходим, потому что, если вы хотите продлить свое мероприятие, чтобы предоставить больше информации в будущем, у вас возникнут проблемы с переносимостью для всех клиентов, использующих оригинальную сигнатуру метода оригинального события.
Например,
public void IHandleEventVersion1(string p1, int p2)
{
....
}
Теперь вы хотите, чтобы предоставить более подробную информацию в случае EventVersion1
выше (вы хотите включить char
). Затем вы должны заставить клиент переписать их обработку событий, чтобы соответствовать вашим новым требованиям, как так:
public void IHandleEventVersion1(string p1, int p2, char p2)
{
...
}
Посмотрите, как неловко он мог бы стать при попытке предоставить больше информации?
Таким образом, класс EventArgs
обеспечивает общий шаблон проектирования для программирования, позволяя вам и мне быстро расширять данные, которые мы хотим предоставить для события.
Общая схема кодирования рамок событийного такова: обработка
Основных события стратегии
- Определить
event
, что потребители вашего класса могут подписаться на
- Определить
delegate
подписи что событие объявляется (да, вы также можете использовать стандартную версию .NET 2.0 от EventHandler
, а именно: EventHandler<TEventArgs>
)
- Обеспечить метод
protected
virtual
для Наследники переопределять в ответ на событие, воспитывающихся в вашем базовом классе
В базовом классе, который объявляет ваше мероприятие, обеспечить базовую реализацию protected
метода, где вы на самом деле поднять событие.
public class MyClass
{
public event EventHandler /* (point 2) */ MyEvent; /* (point 1) */
// (point 3 + 4)
protected virtual void OnMyEvent()
{
EventHandler temp = MyEvent;
if (temp != null)
temp(this, EventArgs.Empty);
}
public void SomeMethodThatWillRaiseTheEvent()
{
....
OnMyEvent();
}
}
Последний параграф - хорошее объяснение. Благодарю. – ark
Событие args - отличный способ сообщить подписчику знать, какое значение предшествующего значения данного свойства было для события с измененным свойством, считая, что такая информация может быть полезна. –