Wie werden Equals und GetHashCode auf anonymen Typen implementiert?
Die Hilfe sagt dies:
Anonyme Typen sind Klassentypen, die direkt vom Objekt abgeleitet sind und nur in Objekte umgewandelt werden können. Der Compiler gibt für jeden anonymen Typ einen Namen an, auf den Ihre Anwendung jedoch nicht zugreifen kann. Aus Sicht der Common Language Runtime unterscheidet sich ein anonymer Typ nicht von einem anderen Referenztyp.
Wenn zwei oder mehr anonyme Objektinitialisierer in einer Assembly eine Folge von Eigenschaften angeben, die in derselben Reihenfolge und mit denselben Namen und Typen vorliegen, behandelt der Compiler die Objekte als Instanzen desselben Typs. Sie haben die gleichen vom Compiler generierten Typinformationen.
Da die Methoden Equals und GetHashCode für anonyme Typen in Bezug auf die Methoden Equals und GetHashCode der Eigenschaften definiert sind, sind zwei Instanzen desselben anonymen Typs nur dann gleich, wenn alle ihre Eigenschaften gleich sind.
Diese Dinge sind wahr, aber wie? Die Referenzquelle zeigt explizit, wie Objekte verglichen werden ReferenceEquals
) und ein Typ, der direkt vom Objekt abgeleitet ist, können dieses spezielle Verhalten nicht aufweisen. Es entspricht nicht dem Verhalten vonEquals
imValueType
entweder
So wie wird es gemacht? Wie können anonyme Typen @ überschreibeEquals()
undGetHashCode()
ohne sichtbare Überschreibungen?