Re[10]: Отличия событий от делегатов
От: MaxMP Россия  
Дата: 21.11.02 18:13
Оценка: 20 (3)
В схеме "один event — одно поле" event от просто поля-делегата на первый взгляд отличаются только расположением вызовов combine()/remove(): в первом случае в сгенерированных add_*/remove_*, во-втором — прямо в коде (там, где использовался +=/-=).

Но на самом деле отличий больше. Event'ы могут быть виртуальными, их можно override, что делать просто с полями нельзя. Можно делать с Property, но, т.к. event'ы обязательно нужно уметь подключать и отключать (в отличие от Property, которое может быть read/write only), ввели event, которые обязывает делать 2 accessor'а. Соответственно event'ы можно включать в интерфейсы, в отличие от просто делегатов-полей.

В случае с event'ами, програмер получает больший контроль над моментом подключения/отключения событий, часто большое кол-во событий, скажем в контроле, организовывают с помощью hashtable, таким образом избавлясь от большого кол-вы полей-event'ов (которые иначе генерируются компилятором). Но это уже мелочи.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.