Entwickler-Ecke

Basistechnologien - Grundlegende Frage zum HashCode


Palladin007 - Sa 09.06.12 16:10
Titel: Grundlegende Frage zum HashCode
Moin

Immer, wenn ich die Equals-Methode überschreiben will, dann soll ich auch die GetHashCode-Methode überschreiben.
Hab ich kein Problem mit, aber da stellt sich bei mir die Frage, wofür der HashCode eigentlich noch ist.


Der wird ja in der Equals-Methode genutzt und gibt zumindest in der aktuellen Instanz des Programms ein Objekt eindeutig an.
Aber gibt es noch andere Verwendungs-Zwecke, wie z.B. die Rück-Wandlung in das ursprüngliche Objekt?
Denn genau das könnte ich sehr gut gebrauchen.


Gruß


Ralf Jansen - Sa 09.06.12 16:27

GetHashCode ist eine Performance Optimierung um Objekte zu vergleichen. Eine durchschnittliche Equals Methode muss ja alle Eigenschaften eines Objekts mit einem anderen vergleichen das ist aufwendig. Die .Net Infrastruktur wird üblicherweise immer versuchen erst GetHashcode zu verwenden bevor es auf Equals zurückgreift (insbesondere in Listen, Dictionaries, Hashsets). Und der Hash ist nicht umkehrbar. Vom Hash kannst du nicht eindeutig auf ein bestimmtest Objekt zurück schliessen. Ein gleicher Hash heißt nicht du hast das richtige Objekt (dann müsste noch der genaue Equals erfolgen). Nur bei einem ungleichen Hash Wert kannst du davon ausgehen das falsche Objekt zu haben.

Zitat:
Aber gibt es noch andere Verwendungs-Zwecke, wie z.B. die Rück-Wandlung in das ursprüngliche Objekt?


Der Hash sind 32 bit. Wenn die den gesamten Informationsgehalt eines komplexen Objektes beinhalten könnten wäre Magie im Spiel.


Palladin007 - Sa 09.06.12 16:48

Ok, dann kann ich also aufhören, nach mehr Aufgaben zu suchen

Danke für die Antwort^^