2010-04-23 3 views
2

Quelle est la différence entre la réflexion normale et la réflexion qui peut être fait avec des expressions lambda comme celle-ci (forme prise build your own MVVM):réflexion sur la base d'expression lambda vs réflexion normale

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); 
} 

est le reflet à base de lambda utilisant simplement les API de réflexion normales en interne? Ou est-ce quelque chose de significativement différent. Quelle est la différence de performance?

Répondre

2

Ensemble de cibles de réflexion, classe et structure d'interface. Il donne accès aux définitions de classe, aux signatures de méthodes, aux informations de type, etc. Il ne permet pas d'accéder au code des méthodes, que ce soit dans l'arborescence de syntaxe abstraite (AST) ou dans le formulaire bytecode.

La famille Expression<> fournit un accès direct à un AST, qui peut être utilisé pour glaner la structure d'un code. C'est en fait beaucoup plus proche de la facilité CodeDOM que de la réflexion.

+0

Y at-il une bonne série d'articles qui peuvent me guider à travers tout cela? – bitbonk

+0

Cet article pourrait vous aider (http://www.infoq.com/articles/expression-compiler). –

+0

Belle réponse .... – nawfal