Por que um membro da classe base é diferente do mesmo membro na classe derivada?
Este é um acompanhamento para esta questão:Expressão lambda não retorna esperado 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?
O mesmo vale paraMethodInfo
s.
Eu posso entender que tem que haver uma diferença quandoHuman
é uma interface, ou quandoname
doHuman
é abstrato / virtual. Mas por que é assim para tipos selados? Não éname
doMan
exatamentename
doHuman
?
Esclarecimento: Como Jon dizReflectedType
s são diferentes.ReflectedType
em igualdade deve ser útil ao decidir a igualdade de membros da interface ou membros substituídos, uma vez que são diferentes. Mas não acho que deva ser considerado para decidir a igualdade de casos simples como os acima. Pode ser que a equipe de design quisesse ser consistente. Basta saber qual a razão que levou os designers de framework a considerarReflectedType
propriedade ao decidir a igualdade do mesmo membro abrangendo várias classes.