Я понимаю, что захват переменных выполняется компилятором, а не классами в самой платформе .NET. Однако, когда DLR была введена, некоторые из этих работ, несомненно, должны были быть выполнены в рамках, чтобы отложить ее до среды выполнения.Каков код, который создает захваченные переменные/замыкания?
Для получения, например, в части коды, приведенной ниже:
dynamic d = ...
Func<int, bool> func = n => n > d;
Разрешение типа переменной d
и его подтверждение того, что она представляет собой целое число должно быть должны быть сделано во время выполнения. А так как d
является переменной в методе хранения лямбда, он будет захвачен в закрытие. Эта часть, безусловно, будет выполнена во время выполнения.
Следовательно, я полагаю, что должна быть какая-то часть сборок DLR (System.Core.dll в основном) это делает эта часть.
Я искал, и я мог найти некоторые классы, которые выглядят подозрительно предосудительными для такого рода задач. В частности, ExpressionQuoter (несмотря на внешний вид этого класса, этот класс не цитирует лямбда-выражения, как метод Expression.Quote
), HoistedLocals и VariableBinder.
Я думал, что приглашу кого-то, кто знает, что лучше ответить на это.
Каким классом или частью .NET Framework являются локаторы, которые содержат методы lambdas (или анонимные методы) в те отдельные классы, у которых есть статические переменные, представляющие их?
Простите за эту опечатку раньше. Я исправил свой фрагмент кода после того, как вы впервые прокомментировали вопрос. –
Не беспокойтесь. Отвечает ли это на вопрос? – usr
Да, сэр. Оно делает. Я забыл, что динамика является заполнитель для объекта в отношении компилятора. Спасибо. –