Как работает делегат .Invoke?

Если я создам делегат в своем коде, например:

delegate void dostuff (string o);

Это генерирует класс, полученный из System.MulticastDelegate, который реализует три метода: Invoke, BeginInvoke и EndInvoke.

Если я посмотрю на скомпилированный IL для Invoke, я вижу следующее:

.method public hidebysig newslot virtual 
        instance void  Invoke(string o) runtime managed
{
} // end of method dostuff::Invoke

Метод не содержит кода. Вызов его действительно работает - делегат вызывается, но я не вижу, как он это делает.

Где вуду, вызывающий вызов Invoke, фактически вызывает делегат?

Ответ 1

Вуду можно найти в конце подписи: runtime managed. Обратите внимание, что все ваши управляемые классы и методы, которые вы определяете, будут оформлены как cli managed.

runtime managed означает, что среда выполнения обеспечивает предварительно оптимизированные реализации методов.