【发布时间】:2013-04-29 10:22:38
【问题描述】:
这是对这个问题的跟进:Lambda expression not returning expected MemberInfo
class Human
{
public string name { get; set; }
}
class Man : Human
{
}
var m1 = typeof(Human).GetProperty("name");
var m2 = typeof(Man).GetProperty("name");
//m1 != m2 why?
MethodInfos 也是如此。
我可以理解,当Human 是一个接口,或者name 的Human 是抽象/虚拟时,肯定会有区别。但是为什么密封类型会如此呢? name 的 Man 不正是 name 的 Human 吗?
澄清:正如 Jon 所说,他们的 ReflectedTypes 是不同的。 ReflectedType 在决定接口成员或覆盖成员的相等性时应该派上用场,因为它们是不同的。但是我认为不应该考虑决定上述简单情况的相等性。可能是设计团队想要保持一致。只是想知道是什么原理促使框架设计人员在决定跨多个类的同一成员是否相等时考虑ReflectedType 属性。
【问题讨论】:
标签: .net inheritance propertyinfo methodinfo fieldinfo