Делегаты

Делегат – это особый тип указателя на функцию, обеспечивающий передачу фрагмента кода как объекта. Ключевое слово delegate позволяет определить тип для функций с заданной сигнатурой. Например, для функций, принимающих целочисленный аргумент и не возвращающих значения, можно создать тип-делегат:

delegate void DlgType( int a );

После этого делегат используется следующим образом:

void fun1( int a ) { stdout.printf("%d\n",a); } // требуемая сигнатура
...
void fun2( 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);} // инициализация ссылкой на ламбда-функцию

Last updated