Использование многоадресной рассылки в C# многоадресных делегатах
Когда полезно иметь многоадресных делегатов над однокамерными делегатами?
Я часто использую делегатов, в основном в сочетании с лямбдами C#, но я никогда не чувствовал необходимости использовать многоадресный аспект делегатов C#, то есть я никогда не хотел объединять несколько делегатов в один делегат. Поэтому мне очень любопытно, в какой ситуации многоадресные делегаты полезны - я могу думать только о примерах, в которых вы можете легко реализовать функциональность другим способом, скажем, приковав делегатов цепочкой или поместив их в список.
В частности, ответ Эрика Липперта здесь создает впечатление, что даже команда C# иногда забывает о многоплановости делегатов.
2 ответа
Все, что действует как событие, является здесь классическим ответом - тогда вызывающему абоненту не нужно знать, кто слушает (просто вызовите его, если оно не равно нулю). Это идеально, поскольку несколько операций могут подписываться одновременно - например, 3 отдельных элемента управления, наблюдающих (привязка данных) к одному и тому же свойству в модели представления.
Любые случаи, когда делегат действует как функция (в частности, с возвращаемым значением), является хитрым, так как вам нужно подумать, как вы справитесь с этим - возьмите первое? Прошлой? Совокупные?
События являются ярким примером использования MulticastDelegates. Так что, вероятно, не осознавая этого, вы используете их каждый день.