Делегат - класс, который позволяет хранить в себе ссылку на метод с определённой сигнатурой (порядком и типами принимаемых и типом возвращаемого значений) произвольного класса.
--------------от меня
вообщем вот есть тип int, 8 это int, и вот делегат это тип функции, тип описывающий сигнатуру функции
то есть функция:
intadd(inta,intb){returna+b;}
имеет "тип"
delegateintDelegateType(inta,intb);
и теперь любую другую функцию которая принимает 2 инта, и возвращает инт можно присвоить к этому делегату
----------------
Делегаты позволяют управлять частями кода как объектами(функции высшего порядка, объекты первого класса). Пример выше определяет новый тип под названием DelegateType, который представляет из себя метод, получающий целочисленную переменную (int) и не возвращающий значения. Любой метод, который соответствует этой сигнатуре может быть назначен переменной этого типа или передан как аргумент метода этого типа.
delegatevoidDelegateType(inta);voidf1(inta){stdout.printf("%d\n",a);}voidf2(DelegateTyped,inta){d(a);// Вызов делегата}voidmain(){f2(f1,5);// Передача метода как аргумент делегата другому методу}
Этот код выполнит метод f2, передавая ссылку на метод f1 и число 5. f2 затем выполнит метод f1, передавая ему число.
Делегаты могут быть объявлены локально. Метод класса также может быть присвоен делегату, например: