Чтобы добавить к другим ответам уже здесь, позвольте мне использовать аналогию для объяснения событий.
Предположим, вы хотите получать газеты каждый день. Вы звоните в газетную компанию, чтобы сообщить им, что хотите получать новые газеты, которые они могут печатать - вы «подписываетесь» на газету. Люди, доставляющие газету, ведут список людей, которые являются подписчиками - люди, которые должны получить газету. Когда газета печатается каждый день, если вы находитесь в списке подписчиков, вы получите газету.
Теперь предположим, что у вас есть объект - например, кнопка. Предположим, вы хотите знать, когда эта кнопка нажата. Вы «подписываетесь» на события - в частности, «OnClick» или «OnPressed», или как там их можно назвать на вашем языке использования. Всякий раз, когда пользователь нажимает кнопку, кнопка просматривает список своих подписчиков и вызывает функцию, предоставленную каждому. Это «обработчики событий». Эти функции - то, что подписчики хотят вызвать, когда происходит событие. На английском языке абонент может сказать «Когда вы нажмете, вызовите функцию MyOnClick ()».
События используются во многих парадигмах программирования, чтобы справляться со сложностью - события не должны ничего знать об обработчиках событий, и наоборот. Это обеспечивает более слабую связь и более модульный, многократно используемый код.
Предлагаю вам прочитать о Observer Pattern , так как это основа для событий и обработчиков событий.