Так в чём же разница между событиями и делегатами в .NET?
В последнем примере предыдущего раздела при объявлении события очевидно его строгое соответствие определённому делегату.
public static event System.EventHandler xEvent;
System.EventHandler – это ТИП ДЕЛЕГАТА! Оператор, который обеспечивает процедуру “подписания на уведомление”, полностью соответствует оператору модификации многоадресного делегата. Аналогичным образом дело обстоит и с процедурой “отказа от уведомления”.
BaseClass.xEvent += new System.EventHandler(this.MyFun);
BaseClass.xEvent -= new System.EventHandler(xxx.MyFun);
И это действительно так. За операторными функциями += и -= скрываются методы классов-делегатов (в том числе и класса-делегата System.EventHandler).
Более того. Если в последнем примере в объявлении события ВЫКИНУТЬ ключевое слово event –
public static event System.EventHandler xEvent;
и заменить его на:
public static System.EventHandler xEvent;
System.EventHandler – это класс-делегат! То ничего не произойдёт. Вернее, ВСЁ будет происходить, как и раньше! Вместо пары СОБЫТИЕ-ДЕЛЕГАТ будет работать пара ДЕЛЕГАТ-ДЕЛЕГАТ. Таким образом, функционально событие является всего лишь разновидностью класса-делегата, главной задачей которого является обеспечение строгой привязки делегата к соответствующему событию.
Модификатор event вносит лишь незначительные синтаксические нюансы в использование этого МОДИФИЦИРОВАННОГО делегата. Чтобы хоть как-нибудь различать возбудителя и получателя события.