Как работает Delegate.Invoke? - PullRequest
10 голосов
/ 17 июня 2011

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

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 Ответ

7 голосов
/ 17 июня 2011

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

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

...