Делегат – это особый тип указателя на функцию, обеспечивающий передачу фрагмента кода как объекта. Ключевое слово delegate позволяет определить тип для функций с заданной сигнатурой. Например, для функций, принимающих целочисленный аргумент и не возвращающих значения, можно создать тип-делегат:
delegatevoidDlgType(inta);
После этого делегат используется следующим образом:
voidfun1(inta){stdout.printf("%d\n",a);}// требуемая сигнатура...voidfun2(DlgTyped,inta)// функция использует делегат{d(a);}...fun2(fun1,3);
При вызове функции fun2 ей передаётся указатель на функцию fun1 и числовое значение 3. Далее в теле fun2 вызывается через делегата функция fun1, которой передаётся числовое значение.
Также вы можете создавать локальные переменные этого типа:
DlgTyped1=fun1;// инициализация ссылкой на функцию с требуемой сигнатуройDlgTyped2=(a)=>{stdout.printf("%d\n",a);}// инициализация ссылкой на ламбда-функцию