+ = оператор с Событиями

public void Bar()
{
    Foo foo = new Foo();
    **foo.MyEvent += foo_MyEvent;**
    foo.FireEvent();        
}

void foo_MyEvent(object sender, EventArgs e)
{
    ((Foo)sender).MyEvent -= foo_MyEvent;
}

Эй я немного незнаком с событиями, кто-то мог сказать мне, что + = оператор делает с событиями?

20
задан John Saunders 28 July 2010 в 19:17
поделиться

4 ответа

+ = подписывается на событие. Делегат или метод в правой части + = будет добавлен во внутренний список, который отслеживает событие, и когда класс-владелец инициирует это событие, все делегаты в списке будут называться.

38
ответ дан 29 November 2019 в 22:52
поделиться

В этом случае метод foo_MyEvent сработает при вызове этого события (поэтому вы подписываетесь на событие в строке 4)

1
ответ дан 29 November 2019 в 22:52
поделиться

Принятый вами ответ - это хорошая упрощенная версия того, что делает +=, но это не полная история.

Оператор += вызывает метод add на событии. Аналогично -= вызывает метод remove. Это обычно приводит к тому, что делегат добавляется во внутренний список обработчиков, которые вызываются при наступлении события, но не всегда.

Вполне возможно определить add для выполнения чего-то другого. Этот пример может помочь продемонстрировать, что происходит, когда вы вызываете +=:

class Test
{
    public event EventHandler MyEvent
    {
        add
        {
            Console.WriteLine("add operation");
        }

        remove
        {
            Console.WriteLine("remove operation");
        }
    }       

    static void Main()
    {
        Test t = new Test();

        t.MyEvent += new EventHandler (t.DoNothing);
        t.MyEvent -= null;
    }

    void DoNothing (object sender, EventArgs e)
    {
    }
} 

Выход:

add operation
remove operation

Дополнительную информацию см. в статье Джона Скита о событиях и делегатах.

20
ответ дан 29 November 2019 в 22:52
поделиться

Добавляет обработчик к событию. Это означает, что метод справа от оператора будет вызван при возникновении события.

0
ответ дан 29 November 2019 в 22:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: