Если я создаю делегат в моем коде, например:
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 на самом деле вызывать делегата?