делегаты



Delegate

Автор KOLANICH задал вопрос в разделе Другие языки и технологии

Делегаты. Что такое делегаты? Подробно и популярно плз. На хабре и в википедии уже читал и ничего не понял. и получил лучший ответ

Ответ от Антон -[гуру]
Грубо говоря, это такой способ записать функцию в переменную.
Например, есть функция сортировки, она должны знать 2 вещи:
1) что сортировать (массив)
2) как сортировать (по какому критерию, как определить что должно стоять раньше, а что позже)
С первым аргументом всё просто. А вот "как сортировать" можно объяснить только кодом. Соответственно нужно передавать функции сортировки другую функцию, которая сможет выполнить сравнение любых двух элементов и вернуть результат сравнения.
Функции сравнения могут быть разными, сравнивать можно по возрастанию, по убыванию, по каким то другим критериям. А вот алгоритм сортировки от этого не меняется, нужно в любом случае как-то сравнить 2 элемента.
Вот чтобы передать одной функции другую функцию и используются делегаты. В нашем примере обязанности сравнения элементов как бы делегируются функции-делегату.
delegate int ComparerDelegate(double x, double y);
Функция сортировки:
void Sort(double[] array, ComparerDelegate comparer)
{
// тут сортировка с применением делегированного функционала сравнения
}
Пример с кодом ссылка.
KOLANICH
Гуру
(4578)
нормальный уровень, спасибо.
просто на хабре есть несколько статей про делегаты в с++, но они больно мудрёные, и выглядят так, как будто речь идёт о паттерне "подписчик"
а в википедии вообще нормальной инфы нет
в си/си++ это указатель на функцию, я верно вас понял ?

Ответ от 22 ответа[гуру]
Привет! Вот подборка тем с похожими вопросами и ответами на Ваш вопрос: Делегаты. Что такое делегаты? Подробно и популярно плз. На хабре и в википедии уже читал и ничего не понял.
Делегат программирование на Википедии
Посмотрите статью на википедии про Делегат программирование
Делегация на Википедии
Посмотрите статью на википедии про Делегация
Шаблон делегирования на Википедии
Посмотрите статью на википедии про Шаблон делегирования
 

Ответить на вопрос:

Имя*

E-mail:*

Текст ответа:*
Проверочный код(введите 22):*