Amir228
@Amir228

В чем различие между делегатоми и событиями?

Не совсем понял в чем различие между событиями и делегатоми. Я знаю что событие например можно обьевлять в интерфейсах, что у них есть два метода add/remove. Но я не понял главное, зачем нужны событие если есть делегаты? Они ведь оба просто вызывают методы когда надо, удаляют или добавляют ссылку на методы.

Когда я писал выше про делегаты я имел ввиду экземпляр делегата, не тип.
  • Вопрос задан
  • 122 просмотра
Решения вопроса 2
@mvv-rus
Настоящий админ AD и ненастоящий программист
Событие (event) - это синтаксический сахар, которым посыпан механизм вызова одного или несколких методов на основе базового для всех делегатов встроенного типа Delegate (вызов нескольких методов реализует класс MulticastDelegate, унаследованный от Delegate) Компилятор же, встретив ключевое слово event, создает переменную-делегат указанного типа с тем же именем (далее ИмяСобытия), доступную только внутри класса (т.е. private) и два метода: add_ИмяСобытия и remove_ИмяСобытия. А встретив операторы += и -= для подписки/отписки вызывает соответсвующий метод. Подробнее можно посмотреть в главе 11 книги Джеффри Рихтера "CLR via C#. Программирование на платформе Microsoft .NET Framework 4.5 на языке C#".
Вызывать несколько методов можно и через один делегат - см. пример в справке для класса MulticastDelegate.
Ответ написан
Комментировать
vabka
@vabka Куратор тега C#
Токсичный шарпист
Ну это совсем разное.
События дают тебе механизм подписки и отписки на что-то (эти самые события) и вызова всех делегатов-подписчиков одной строчкой кода.

Делегаты позволяют передавать какой-нибудь метод как объект - в тч для того чтобы подписываться на события.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы