2010-04-23 5 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 (Abstract Syntax Tree) 또는 바이트 코드 양식에서 메소드 코드에 액세스 할 수는 없습니다.

Expression<> 계열은 AST에 대한 직접 액세스를 제공하며 코드 조각 구조를 수집하는 데 사용할 수 있습니다. 실제로 이것은 리플렉션보다 CodeDOM 기능에 훨씬 가깝습니다.

+0

이 모든 것을 통해 나를 걸을 수있는 일련의 기사가 있습니까? – bitbonk

+0

이 [article] (http://www.infoq.com/articles/expression-compiler) 도움이 될 수 있습니다. –

+0

좋은 답변 .... – nawfal