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;
}
Эй я немного незнаком с событиями, кто-то мог сказать мне, что + = оператор делает с событиями?
+ =
подписывается на событие. Делегат или метод в правой части + =
будет добавлен во внутренний список, который отслеживает событие, и когда класс-владелец инициирует это событие, все делегаты в списке будут называться.
В этом случае метод foo_MyEvent сработает при вызове этого события (поэтому вы подписываетесь на событие в строке 4)
Принятый вами ответ - это хорошая упрощенная версия того, что делает +=
, но это не полная история.
Оператор +=
вызывает метод 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
Дополнительную информацию см. в статье Джона Скита о событиях и делегатах.
Добавляет обработчик к событию. Это означает, что метод справа от оператора будет вызван при возникновении события.