Warum unterscheidet sich ein Mitglied der Basisklasse von demselben Mitglied in der abgeleiteten Klasse?
Dies ist eine Fortsetzung dieser Frage:Lambda-Ausdruck gibt erwartete MemberInfo nicht zurück
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?
Gleiches gilt fürMethodInfo
s.
Ich kann verstehen, dass es einen Unterschied geben muss, wannHuman
ist eine Schnittstelle oder wannname
vonHuman
ist abstrakt / virtuell. Aber warum ist es so für versiegelte Typen? Nichtname
vonMan
genauname
vonHuman
?
Klärung: Wie Jon sagt ihrReflectedType
s sind anders.ReflectedType
in equality sollte sich als nützlich erweisen, wenn Sie die Gleichheit von Schnittstellenmitgliedern oder überschriebenen Mitgliedern entscheiden, da sie unterschiedlich sind. Aber ich denke nicht, dass es für die Entscheidung über die Gleichheit einfacher Fälle wie oben in Betracht gezogen werden sollte. Vielleicht wollte das Designteam konsequent sein. Ich frage mich nur, welche Überlegungen dazu geführt haben, dass Framework-Designer überlegtenReflectedType
Eigenschaft bei der Entscheidung über die Gleichheit desselben Mitglieds über mehrere Klassen hinweg.