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