Код, эквивалентный + = присвоение событию - PullRequest
5 голосов
/ 04 августа 2009

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

1 Ответ

10 голосов
/ 04 августа 2009

event определяет набор методов, включая «добавить» и «удалить» (так же, как свойство определяет «получить» и «установить»). на это эффективно:

obj.add_SomeEvent(handler);

Внутренне событие могло сделать что угодно; Есть 2 распространенных случая:

  • события с полем делегата (включая «полевые» события)
  • EventHandlerList реализации

С делегатом он эффективно использует Delegate.Combine:

handler = Delegate.Combine(handler, value);

С EventHandlerList есть ключевой объект:

Events.AddHandler(EventKey, value);
...