> -- Сергей Губанов писал(а):
> Делегат это не указатель на функцию, а это объект динамически размещаемый в куче и лишний раз почём зря напрягающий своей тушкой сборщик мусора. Внутри тушки делегатного объекта лежит указатель на таргетный объект "делегировавший" его и особым образом закодирована информация о методе таргетного объекта, который через этот делегат можно вызвать.

Ну, в Шарпе его сделали объектом, но это совершенно не обязательно.
Никто не мешает сделать value-значением. Просто копировать пару (адрес процедуры, указатель на объект).
Это справедливости ради.

(Так, в тему: мне были как-то интенсивно (по всей подсистеме) нужны указатели на процедуры, устойчивые к выгрузке модулей. А подсистема серверная, т.е. постоянно по имени раскапывать через Meta не будешь. Завёл тип RECORD с указателем на Kernel.Module и со смещением точки входа в процедуру от начала модуля. При разыменовании (procPtr.GetProc) проверяется, что модуль не выгружен (mod.refcnt >= 0), а если выгружен, то ищется его новая версия, выясняется имя процедуры по старой версии - и обновляется.)