Wenn Sie bei Bedarf benutzerdefinierte Typen in .NET definieren, sollten Sie nicht nur die Equals -Methode neu schreiben, sondern auch die Gethashcode -Methode neu schreiben, was sehr wichtig ist. Dies ist besonders wichtig, wenn der Typ als Schlüssel in einer Sammlung von Wörterbüchern und Hash -Sets verwendet wird.
Warum Gethashcode neu geschrieben?Gethashcode ist für das Generieren von Hash -Code für Objekte verantwortlich. Wenn Sie diesen Hash -Code ohne benutzerdefinierte Komparatoren sammeln, um den richtigen Zeitplan für das Finden von Objekten darin zu bestimmen. Wenn der Hash -Code der beiden Objekte gleich ist, wird angenommen, dass sie sich im selben Eimer befinden, und nur zu diesem Zeitpunkt wird gleichberechnet, um detailliertere gleiche Überprüfungen durchzuführen.
Die bevorzugte Gethashcode -Methode
In Anbetracht der bereitgestellten FOO -Klasse wird das Umschreiben von Gleichen auf der Grundlage des FOOID -Attributs verglichen. Diese Methode stimmt mit der Equals Logic überein, um sicherzustellen, dass Objekte mit demselben Fooid denselben Hash -Code haben.Die Konsequenzen des falschen Umschreibens von Gethashcode
ignorieren Sie den Umschreiben von Gethashcode und verwenden Sie die Standardimplementierung, die die folgenden nachteiligen Auswirkungen verursacht:
verpassen gleiches Objekt:
Wenn die beiden Objekte tatsächlich gleich sind, aber unterschiedliche Hash -Codes haben, werden sie möglicherweise nie als gleich angesehen, da sie nicht gleich aufrufen. Zu viele Konflikte:
Die Implementierung von Gethashcode führt zu übermäßigen Konflikten, und viele von ihnen werden mit demselben Hash -Code zugewiesen, was zu einer geringen Leistungseffizienz führt.
Bequemer Transport: Berücksichtigung der Last == und dem Bediener, um den Vergleich zu erleichtern.
Das obige ist der detaillierte Inhalt vonSollten Sie Gethashcode überschreiben, wenn Sie in .NET überschreiben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!