За это проголосуют именно потому, что это правильно. C # не реализует делегатов, он реализует переадресацию вызовов. Это неправильное использование номенклатуры, вероятно, самая большая проблема с C # в этом отношении.
Документ ACM, представленный ниже, является первым описанием того, что позже будет называться делегатом. По сути, делегат - это то, что кажется экземпляром объекта (то, как он на самом деле реализован, не имеет значения). Это означает, что вы можете вызывать методы, обращаться к свойствам и т. Д. Из делегата.
http://web.media.mit.edu/~lieber/Lieberary/OOP/Delegation/Delegation.html
В C # реализованы обратные вызовы или переадресация вызовов (все зависит от того, как вы их используете). Это не делегаты. Чтобы быть делегатом, нужно иметь доступ к объекту, как если бы это был сам объект.
Когда ручка передает сообщение обрисовки прототипу, оно говорит: «Я не знаю, как обрабатывать сообщение об отрисовке. Я бы хотел, чтобы вы ответили мне, если можете, но если у вас есть какие-либо дополнительные вопросы, например, какова стоимость моей переменной x, или вам нужно что-то сделать, вы должны вернуться ко мне и спросить ». Если сообщение Далее делегируется, все вопросы о значениях переменных или запросах ответа на сообщения все выводятся объекту, который делегировал сообщение в первую очередь. - Генри Либерман
Так, как это испортилось? Если честно, я не знаю. Я действительно знаю, что использую делегаты (уже более 16 лет) задолго до C # и то, что реализует C #, не является делегатами.
Здесь можно найти действительно хорошее объяснение.
http://www.saturnflyer.com/blog/jim/2012/07/06/the-gang-of-four-is-wrong-and-you-dont-understand-delegation/
Реальное делегирование - это больше, чем создание обратных вызовов или переадресация вызовов. Настоящий делегат позволяет мне вызывать любой метод для этого объекта, получать и / или устанавливать общедоступные свойства и т. Д. - все как если бы это был сам объект. Это гораздо мощнее и проще в использовании, чем «делегирование» в C #.
ОП спросил:
Означает ли термин обратный вызов в контексте делегатов: «делегат, делегирующий его, работает с другим поручением делегата для завершения некоторой задачи»?
Ответ на это да. Обратный вызов в контексте делегатов может быть использован только для завершения какой-либо задачи. Например, у вас есть класс, который получает данные с сайта погоды. Поскольку он не является детерминированным, реализация обратного вызова, когда данные получены (и, возможно, проанализированы), будет неоправданным.
Относительно того, почему делегирование было повреждено, я понятия не имею. Я с нетерпением жду, когда C # осуществит делегирование TRUE.