У меня есть делегат, скажите:
public delegate void MyDelegate();
У меня есть событие, скажем:
public MyDelegate MyEvent;
При вызове события я получаю сообщение об ошибке:
"MyEvent + = ожидается ....."
Как мне решить эту проблему?
+ = связано с событиями, а не просто с объявлением делегата. Вам не хватает ключевого слова 'event'.
public **event** MyDelegate MyEvent;
Если у вас есть это ключевое слово, + = будет работать для вас.
Вы можете вызвать событие только из класса, в котором вы его объявили. В любом другом месте вы можете добавлять или удалять обработчики из делегата события только через операторы += и -=, отсюда и сообщение об ошибке.
+=
-=
Если вы пытаетесь использовать событие из другого класса, вам необходимо понять разницу между событиями и делегатами. Событие просто заключает в себе аспекты «подписаться» и «отписаться», а не «инициировать событие». (На самом деле в IL у вас может есть член для "поднять событие", но C # его не поддерживает.)
См. мою статью о событиях и делегатах для более подробной информации.
Ознакомьтесь с Крисом Селлсом .NET Delegates: Сказка на ночь на C # для отличного руководства для делегатов и мероприятий. Познавательно и довольно занимательно.
Также вы можете захотеть взглянуть на этот пост о избегая проверки на нулевые делегаты