> For the complete documentation index, see [llms.txt](https://nim-ru-tutorial.gitbook.io/ibm-vala-guide/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://nim-ru-tutorial.gitbook.io/ibm-vala-guide/chast-2-obektno-orientirovannoe-programmirovanie-na-yazyke-vala-1/delegaty.md).

# Делегаты

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

```csharp
delegate void DlgType( int a );
```

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

```csharp
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, которой передаётся числовое значение.

Также вы можете создавать локальные переменные этого типа:

```csharp
DlgType d1 = fun1;   // инициализация ссылкой на функцию с требуемой сигнатурой
DlgType d2 = (a)=>{stdout.printf("%d\n",a);} // инициализация ссылкой на ламбда-функцию
```
