Использование многоадресной рассылки в C # многоадресных делегатах - PullRequest
4 голосов
/ 09 июня 2011

Когда полезно иметь многоадресных делегатов поверх однокамерных делегатов?

Я часто использую делегатов, в основном в сочетании с лямбдами C #, но я никогда не чувствовал необходимости использовать многоадресный аспект делегатов C #, то есть я никогда не хотел объединять несколько делегатов в один делегат. Поэтому мне очень любопытно, в каких ситуациях многоадресные делегаты полезны - я могу думать только о примерах, в которых вы можете легко реализовать функциональность другим способом, скажем, приковав делегатов цепочкой или поместив их в список.

В частности, ответ Эрика Липперта здесь создает впечатление, что даже команда C # иногда забывает о многоадресности делегатов.

Ответы [ 2 ]

7 голосов
/ 09 июня 2011

Все, что действует как событие, является здесь классическим ответом - тогда вызывающему абоненту не нужно знать, кто слушает (просто вызовите его, если оно не равно нулю). Это идеально, поскольку несколько операций могут подписываться одновременно - например, 3 отдельных элемента управления, наблюдающих (привязка данных) к одному и тому же свойству в модели представления.

Любые случаи, когда делегат действует как функция (в частности, с возвращаемым значением), является хитрым, так как вам нужно подумать, как вы справитесь с этим - взять первое? Прошлой? Совокупные

7 голосов
/ 09 июня 2011

События являются ярким примером использования MulticastDelegates.Поэтому, вероятно, не осознавая этого, вы используете их каждый день.

...