[Из песочницы] Делегаты и Лямбда выражения в C# .Net — Шпаргалка или коротко о главном

habralogo.jpg

Комментарии (1)

  • 31 мая 2017 в 12:16 (комментарий был изменён)

    +1

    Если метод экземплярный то в поле target записывается ссылка на экземпляр-владелец метода (он нужен нам, ведь если метод экземплярный то это как минимум подразумевает работу с полями этого объекта target), а в methodPtr ссылка на метод. Если метод статический то записываются в поля target и methodPtr будут записаны null и ссылка на метод соответственно.

    Для статических методов можно точно так же указывать target. В таком случае он станет первым аргументом метода (соответственно, у метода должно быть на один параметр больше, чем в сигнатуре делегата).


    Этой возможностью компилятор C# пользуется при создании делегатов на методы-расширения. Также ее удобно использовать совместно с компиляцией деревьев выражений через CompileToMethod, потому что методы экземпляров там толком не поддерживаются.



    Также не могу не напомнить, что лямбда-выражение не обязано быть делегатом, оно может быть и типа Expression<>

© Habrahabr.ru