Как работает delegate.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 на самом деле вызывать делегата?

10
задан Warren Rumak 17 June 2011 в 17:56
поделиться