Как работают делегаты и события? - 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); 
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.733 из 5