[Из песочницы] Делегаты и Лямбда выражения в C# .Net — Шпаргалка или коротко о главном
Комментарии (1)
31 мая 2017 в 12:16 (комментарий был изменён)
+1↑
↓
Если метод экземплярный то в поле target записывается ссылка на экземпляр-владелец метода (он нужен нам, ведь если метод экземплярный то это как минимум подразумевает работу с полями этого объекта target), а в methodPtr ссылка на метод. Если метод статический то записываются в поля target и methodPtr будут записаны null и ссылка на метод соответственно.
Для статических методов можно точно так же указывать target. В таком случае он станет первым аргументом метода (соответственно, у метода должно быть на один параметр больше, чем в сигнатуре делегата).
Этой возможностью компилятор C# пользуется при создании делегатов на методы-расширения. Также ее удобно использовать совместно с компиляцией деревьев выражений через CompileToMethod, потому что методы экземпляров там толком не поддерживаются.
Также не могу не напомнить, что лямбда-выражение не обязано быть делегатом, оно может быть и типа
Expression<>