Из объявления типа делегата
компилятор генерирует
класс,
производный от
System.Delegate
. Таким образом,
сигнатура функции, принимающей делегат в качестве аргумента, может выглядеть так:
public MyFunction (Delegate anotherFunction);
Дополнительной особенностью делегатов является то, что их можно вызывать асинхронно асинхронный делегат, с помошью метода
BeginInvoke()
. В этом случае в пуле потоков ищется свободный и указанная функция выполняется паралельно в его контексте. Стоит однако отметить что количество потоков в пуле ограничено (в текущей реализации .NET их 25) и остальные вызовы будут ждать своей очереди.