Нужно краткое определение "делегат" - PullRequest
8 голосов
/ 22 июля 2010

Мне нужно краткое описание того, как «делегирование» работает в программировании, желательно в одном предложении.Еще лучше использовать аналогии

Ответы [ 7 ]

16 голосов
/ 22 июля 2010
10 голосов
/ 22 июля 2010

Еще лучше использовать аналогии

Делегаты похожи на насилие.Если они еще не решили вашу проблему, значит, вы не использовали достаточно.

ОК, эта шутка не оригинальная , поэтому подайте в суд.Делегаты как ... делегаты.Отсюда и название.Что такое делегат в реальной жизни? Делегатом является тот, кто действует от имени другого .Вы делегируете работу с ними, и они выполняют эту работу.Вы хотите обменять пятьдесят акций корпорации XYZ, вы не идете на торговую площадку и делаете это самостоятельно, вы передаете эту работу своему брокеру, который делает это для вас;как они это делают, вам все равно, пока это делается.Брокер - ваш представитель;они выполняют работу от вашего имени.

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

10 голосов
/ 22 июля 2010
6 голосов
/ 22 июля 2010

Делегат оборачивает метод в безопасный для объекта тип, ссылаясь на способ, которым открыватель пива упаковывает метод ( открывающее пиво ) в удобный инструмент ( открывающее пиво ), который может бытьиспользуется снова и снова для разных видов пивных бутылок.

Определены входные данные для открывателя пива, определенный тип бутылки и сила (ваши руки).Он содержит ключ к действию, форма которого всегда одинакова.Аналогично, есть входные данные, определенные для делегата, который содержит ключ, контракт, для действия (показывающего форму) с определенным входным значением (форма).

Примечание: это не около 99 бутылок пива;)

Примечание (2): вы можете открыть пиво без устройства для открывания пива , так же, как вы можете использовать метод (даже его ссылку) без делегата.Это просто грязнее и менее понятно, но может быть намного веселее.

1 голос
/ 22 июля 2010

Делегат похож на стажера, когда вы говорите: «Эй, мне нужен стажер, чтобы принести мне чашку кофе».

Если повезет, ты найдешь человека, способного выполнить "принеси мне чашку кофе". Разные интерны могут выполнять эту задачу по-разному, например, один может выбежать в Starbucks. Другая может бегать, пока она не найдет непустой кофейник где-то в здании и налить вам чашку.

1 голос
/ 22 июля 2010

Делегат - это тип, который ссылается на метод.

1 голос
/ 22 июля 2010

Лучшая аналогия, которую я могу придумать, исходит из терминологии Си, которая является «указателем на функцию».

Идея заключается в том, что вам нужно иметь возможность вызывать фрагмент кода, но этот фрагмент кода, который вы собираетесь вызывать, неизвестен до времени выполнения. Таким образом, вы используете «делегат» для этой цели.

...