2010-04-23 1 views
2

В чем разница между нормальным отражением и отражения, что можно сделать с помощью лямбда-выражений, таких, как это (взято форма build your own 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 нормального отражения внутри? Или это нечто значительно другое. Что такое разница в производительности?

ответ

2

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

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

+0

Есть ли хорошая серия статей, которые могут мне пройти через все это? – bitbonk

+0

Эта статья [http://www.infoq.com/articles/expression-compiler] может помочь. –

+0

Хороший ответ .... – nawfal

Смежные вопросы