A delegate
- определение типа. Он указывает сигнатуру, что метод должен быть совместимым.
event
является элементом класса, подобным свойству, на основе типа делегата. Он обеспечивает инкапсуляцию, единственные открытые действия - добавить (+ =) или удалить (- =) обработчик.
(1) Нет, событие нигде не зарегистрировано. Но это место, где регистрируются методы обработки.
(2) Я не знаю, как работает VB6, но в .NET все события основаны на делегатах.
(2b) При нажатии кнопки происходит то, что код кнопки проверяет, не является ли событие нулевым, и затем вызывает событие (как метод). Событие перебирает свой список вызовов и вызывает все зарегистрированные обработчики.
есть еще кое-что: ButtonClick создается самой Button, когда она обрабатывает и обрабатывает события мыши и / или клавиатуры. Эти события приходят из MessageLoop (Application.Run). Но на уровне CLR это просто означает, что MessageLoop вызывает метод (Control.Perform (..)) для Button.
(3) Вы можете написать делегат и / или событие, которое просто отлично возвращает значение. Но подумайте, что это значит, когда есть несколько обработчиков. Подпись void handler(object sender, Eventargs e)
является (сильной) рекомендацией.