naw*_*fal 4 .net inheritance propertyinfo methodinfo fieldinfo
这是此问题的后续内容:Lambda表达式未返回预期的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?
Run Code Online (Sandbox Code Playgroud)
这同样适用于MethodInfo秒.
我可以理解,必须有一个差时Human是一个接口,或当name的Human是抽象/虚拟的.但为什么密封型呢?不是name的Man确切name的Human?
澄清:乔恩说他们ReflectedType的不同.ReflectedType在决定接口成员或被覆盖成员的相等性时,平等应该会派上用场,因为它们是不同的.但我不认为应该考虑决定上述简单案件的平等性.可能是设计团队希望保持一致.只是想知道是什么原因促使框架设计者ReflectedType在决定跨越多个类的同一成员的相等性时考虑属性.
他们的ReflectedType财产不同:
ReflectedType属性检索用于获取MemberInfo的此实例的Type对象.如果此MemberInfo对象表示从基类继承的成员,则此值可能与DeclaringType属性的值不同.
所以,如果你打印出来m1.ReflectedType,它应该打印出来Human.如果你打印出来m2.ReflectedType,它应该打印出来Man.
编辑:就为什么以这种方式实现相等运算符而言:在==对象之间可能存在可区分但不是"主要"差异的情况下,确定应该意味着什么是一个微妙的设计决策.这是提供不同IEqualityComparer实现有用的地方,但当然这对运营商本身不起作用.
一般来说,如果x == y是真的那么对于任何财产来说x.Foo都是不同的y.Foo.我不能立即想到框架中发生的任何情况.