Отражение на основе лямбда-выражения против нормального отражения - PullRequest
2 голосов
/ 23 апреля 2010

В чем разница между нормальным отражением и отражением, которое может быть выполнено с помощью лямбда-выражений, таких как это (в форме построить свой собственный MVVM ):

public void NotifyOfPropertyChange<TProperty>(Expression<Func<TProperty>> property)
{
    var lambda = (LambdaExpression)property;
    MemberExpression memberExpression;
    if (lambda.Body is UnaryExpression)
    {
        var unaryExpression = (UnaryExpression)lambda.Body;
        memberExpression = (MemberExpression)unaryExpression.Operand;
    }
    else memberExpression = (MemberExpression)lambda.Body;
    NotifyOfPropertyChange(memberExpression.Member.Name);
 }

Является ли лямбдана основе отражения, просто используя обычные API-интерфейсы отражения внутри?Или это что-то значительно другое.Какая разница в производительности?

1 Ответ

2 голосов
/ 23 апреля 2010

Сборка целей отражения, класс и структура интерфейса. Он предоставляет доступ к определениям классов, сигнатурам методов, информации о типах и т. Д. Он не предоставляет доступ к коду методов ни в дереве абстрактного синтаксиса (AST), ни в форме байт-кода.

Семейство типов Expression<> обеспечивает прямой доступ к AST, который можно использовать для определения структуры фрагмента кода. На самом деле это гораздо ближе к средству CodeDOM, чем к размышлению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...