考虑以下代码:
static void Main(string[] args)
{
Expression<Func<SomeDerivedClass, object>> test = i => i.Prop;
var body = (UnaryExpression) test.Body;
Console.WriteLine(((MemberExpression) body.Operand).Member.ReflectedType);
}
public class SomeClass
{
public int Prop { get; private set; }
}
public class SomeDerivedClass : SomeClass
{
}
我原本期望ReflectedType会是SomeDerivedClass,因为它是表达式参数的类型。但实际上它是SomeClass,如果我理解正确的话,这是声明类型。
为什么会这样呢?
virtual
基属性来说明这一点。使用override
关键字,你会得到SomeClass
。然而,使用(丑陋的)new
关键字,你会得到SomeDerivedClass
。 - l33t