Как работают делегаты и события? - C#
Формулировка задачи:
Уже несколько дней пытаюсь изучить как работают делегаты и события, но так до конца и не могу понять.
Скажите я правильно рассуждаю "При срабатывании события срабатывает делегат который подписан на него, а потом метод который подписан на делегата"?
И еще вопрос. Почему делегаты не подписываются на одно событие хотя сигнатура у них одинаковая?
Листинг программы
- public partial class Form1 : Form
- {
- delegate void del(int i);
- delegate void Del(int i);
- del deleg;
- Del Deleg;
- event del Myevent;
- public Form1()
- {
- InitializeComponent();
- deleg = new del(Mymetod);
- Deleg = new Del(Mymetod);
- Myevent += deleg;
- Myevent += Deleg; //Эта строка не работает
- }
- public void Mymetod(int i)
- {
- }
- }
Решение задачи: «Как работают делегаты и события?»
textual
Листинг программы
- private del Myevent = null;
- private void add_Myevent(del value)
- {
- del prevHandler;
- del newMyevent = this.Myevent;
- do
- {
- prevHandler = newMyevent;
- newHandler = (del)Delegate.Combine(prevHandler, value);
- newMyevent = Interlocked.CompareExchange<del>(ref this.Myevent, newHandler.prevHandler);
- }
- while (newMail != prevHandler);
- }
- private void remove_Myevent(del value)
- {
- del prevHandler;
- del newMyevent = this.Myevent;
- do
- {
- prevHandler = newMyevent;
- newHandler = (del)Delegate.Remove(prevHandler, value);
- newMyevent = Interlocked.CompareExchange<del>(ref this.Myevent, newHandler.prevHandler);
- }
- while (newMail != prevHandler);
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д