«Событие» - это просто ярлык для двух методов, которые работают с делегатом - добавление и удаление методов доступа . По умолчанию компилятор создает делегат за событием (если вы не пишете свои собственные методы доступа).
Когда вы звоните someEvent += aDelegate;
, вы вызываете аксессор события add
. Обычно это переводится компилятором в вызов delegate +=
для делегата с той же сигнатурой, что и у события, - аналогично тому, как автоматические свойства автоматически сопоставляются с вспомогательным полем. Вот почему событие кажется таким похожим на делегата.
что меня больше смущает, так это подпись в MSDN:
открытый делегат void EventHandler (Отправитель объекта, EventArgs e)
Эта подпись является просто подписью делегата. Технически, событие может использовать любой делегат. Однако, по соглашению, он всегда будет принимать два параметра: первый - это «отправитель», вызвавший событие, второй - класс, производный от EventArgs
(например, EventHandler
и EventHandler<T>
).