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