Мне нужно краткое описание того, как "делегация" работает в программировании, предпочтительно в одном предложении. Еще лучше использовать аналогии
Еще лучше использовать аналогии
Делегаты подобны насилию. Если они еще не решили вашу проблему, значит, вы использовали недостаточно.
Хорошо, эта шутка не оригинальна , так что подайте на меня в суд.
Серьезно. Делегаты похожи на ... делегатов. Отсюда и название. Что такое делегат в реальной жизни? Делегат - это тот, кто действует от имени другого . Вы поручаете им работу, а они ее выполняют. Вы хотите торговать пятьюдесятью акциями XYZ corp, вы не идете в торговую площадку и не делаете это сами, вы делегируете эту работу своему брокеру, который делает это за вас; как они это делают, вам все равно, пока это делается. Брокер - ваш представитель; они делают работу от вашего имени.
Делегат - это объект, который представляет способность выполнять работу по запросу. Вы создаете делегата, который выполняет определенную работу, и когда вы хотите, чтобы работа была выполнена, вы просите своего делегата сделать это за вас.
Делегат оборачивает метод в ссылку на объект, безопасный по типу, так же, как открывалка для пива оборачивает метод ( открывалка пива ) в удобный инструмент ( открывалка для пива ), который может быть снова и снова используется для различных пивных бутылок.
Определены входные данные для открывалки для пива, определенного типа бутылки и силы (ваших рук). Он содержит ключ к действию, форма которого всегда одинакова. Точно так же для делегата определен ввод, который содержит ключ, контракт, для действия (показывающего форму) с определенным вводом (форма).
Примечание: это не примерно 99 бутылок пива;)
Примечание (2): вы можете открыть пиво без открывалки , точно так же, как вы можете использовать метод (даже его ссылка) без делегата. Это просто запутано и менее понятно, но может быть намного веселее.
Лучшая аналогия, которую я могу придумать, - это "указатель на функцию" из терминологии языка Си.
Идея заключается в том, что вам нужно иметь возможность вызвать часть кода, но эта часть кода, которую вы собираетесь вызвать, неизвестна до времени выполнения. Поэтому для этой цели вы используете "делегат".
Делегат похож на стажера, когда вы говорите: «Эй, мне нужен стажер, чтобы принести мне чашку кофе».
Если повезет, вы получите кого-то способного выполнения «принеси мне чашку кофе». Разные стажеры могут выполнять эту задачу по-разному, например, один может сбежать в Starbucks. Другой может бегать вокруг, пока не найдет где-нибудь в здании непустой кофейник и налить вам чашку.