正常反射和使用lambda表达式(例如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);
}
基于lambda的反射是否仅在内部使用普通反射API?或者这是一个显着不同的东西。什么是性能差异?
答案 0 :(得分:2)
反射的目标是程序集,类和接口结构。它提供对类定义,方法签名,类型信息等的访问。它不提供对抽象语法树(AST)或字节码形式的方法代码的访问。
Expression<>
类型系列提供对AST的直接访问,可用于收集一段代码的结构。这实际上比CodeDOM设施更接近于反射。