добавление/удаление события по умолчанию

Я хочу реализовать дополнительную логику, когда обработчики событий добавляются или удаляются в событие.

Я знаю, что реализация по умолчанию в .net недавно изменилась.

Я хотел бы, чтобы моя реализация была как можно ближе к реализации по умолчанию.

Может ли кто-нибудь указать мне/предоставить что-то, что показывает, как компилятор реализует события?


person spender    schedule 07.05.2012    source источник
comment
извините, неясно, о чем вы просите ... как реализовать что-то вроде компилятора?   -  person Tigran    schedule 07.05.2012
comment
Компилятор выполняет магию для реализации событий. Я хотел бы знать, как эта магия преобразуется в код, который может быть реализован в обработчиках add/remove, которые могут быть реализованы в коде.   -  person spender    schedule 07.05.2012
comment
Это не магия; это просто сложно.   -  person SLaks    schedule 07.05.2012
comment
Возможно, мне придется применить третий закон Кларка.   -  person spender    schedule 07.05.2012


Ответы (2)


См. эту серию сообщений в блоге.

В C# ‹4 он использовал простые операции делегирования в locks.

В C# 4+ он использует более сложный алгоритм без блокировок, вызывая Interlocked.CompareExchange в цикле; посмотрите на это в декомпиляторе для более подробной информации.

Если вы уверены, что ваши классы никогда не будут использоваться в нескольких потоках, вам ничего из этого не нужно; вы можете просто использовать несинхронизированную арифметику делегата.

person SLaks    schedule 07.05.2012
comment
Спасибо. Кстати, ваш блог не работает. - person spender; 07.05.2012
comment
Ха! Теперь работает нормально. Около 3 минут назад я получил ошибку «Сервис недоступен» 503. - person spender; 07.05.2012
comment
У меня такое было один раз, но после обновления оно исчезло. Обвините Google (я использую blogspot) - person SLaks; 07.05.2012

Не уверен, что это именно то, что вы ищете, но в этой статье показаны некоторые внутренности .NET обработчиков добавления и удаления. (Также показано, как получить и управлять этими обработчиками)

http://www.codeproject.com/Articles/308536/How-to-copy-event-handlers-from-one-control-to-ano

Если вы пытаетесь добавить туда немного логики, статья может показаться вам интересной....

person Alejandro Miralles    schedule 08.05.2012