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^^
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!