C# MemberExpression的ReflectedType是基类,而不是实际使用的类

C# MemberExpression的ReflectedType是基类,而不是实际使用的类,c#,asp.net,.net,.net-4.5.2,C#,Asp.net,.net,.net 4.5.2,所以我在下面的课程中有一个 class Person { virtual string Property{get;set;} } 及 如果我在类型管理器上有一个成员表达式,即: Property prop = PropertyGetter.GetProp<Manager>(p => p.Property) 然后,属性为空 我假设这是因为属性来自基类,未在Manager中定义,但如何避免此问题?如果我在属性上使用new关键字,而不是virtual和override,则

所以我在下面的课程中有一个

class Person
{
    virtual string Property{get;set;}
}

如果我在类型管理器上有一个成员表达式,即:

Property prop = PropertyGetter.GetProp<Manager>(p => p.Property)
然后,
属性
为空


我假设这是因为属性来自基类,未在Manager中定义,但如何避免此问题?

如果我在属性上使用
new
关键字,而不是
virtual
override
,则问题已得到解决

我认为这与没有
Manager
类型的实例有关

另一种修复方法是将
GetProp
的实现更改为do

return typeof(T).GetProperty(property.Name)

<>而不是只返回<代码>属性< /代码>

,您应该考虑阴影的含义。您的隐藏属性必须代理
base.property
getter和setter。如果不这样做,并且碰巧将
管理器
传递给接受
人员
的方法(或通过任何其他方式向上转换
管理器
),则可能会丢失
属性
信息。
var attribute = prop.GetAttribute<SomeAttribute>();
return typeof(T).GetProperty(property.Name)