Heim >Backend-Entwicklung >C++ >Warum müssen Sie `gethashcode` überschreiben, wenn Sie' Equals 'überschreiben?
überschreiben GetHashCode
und Equals
für einen konsistenten Objektvergleich
Wenn Sie neu definieren, wie Objekte einer Klasse für Gleichheit verglichen werden, indem die Methode Equals
überschritten wird, ist es wichtig, die GetHashCode
-Methode zu überschreiben. Dies ist besonders wichtig, wenn Ihre Objekte als Schlüssel in Hash-basierten Sammlungen wie Wörterbüchern oder Hash-Sets verwendet werden.
Betrachten Sie eine Klasse Foo
:
<code class="language-csharp">public override bool Equals(object obj) { // ... comparison logic based on FooId ... }</code>
Wenn Sie Equals
an die Vergleich von Foo
Objekten basierend auf einer FooId
-Mobilie anpassen, generiert der Standard -GetHashCode
(von Object
geerbt) weiterhin Hash -Codes basierend auf der Speicheradresse des Objekts. Diese Inkonsistenz führt zu unvorhersehbarem Verhalten, wenn Foo
Objekte als Schlüssel in Hash -Tabellen verwendet werden.
Warum konsequente Hashing -Angelegenheiten
überschrieben GetHashCode
ist entscheidend für:
Equals
aufzurufen, um dies zu überprüfen. Ein gut implementiertes GetHashCode
minimiert Kollisionen und stellt sicher, dass Equals
die wahre Gleichheit bestimmen. implementieren GetHashCode
effektiv
Die GetHashCode
-Implementierung sollte mit der Logik der Equals
-Methode übereinstimmen:
Equals
-Methode für einen endgültigen Vergleich aus. Für die Foo
Klasse ist eine geeignete GetHashCode
-Verhebung:
<code class="language-csharp">public override int GetHashCode() { return this.FooId.GetHashCode(); }</code>
Dies erzeugt Hash -Codes basierend auf FooId
und spiegelt die Gleichheitsprüfung in Equals
.
Verwenden benutzerdefinierter Vergleiche für erweiterte Klarheit
Wenn Sie und Equals
überschreiben, sollten Sie benutzerdefinierte Gleichstellungsoperatoren (GetHashCode
und ==
) für eine verbesserte Code -Lesbarkeit und -wartbarkeit hinzufügen. !=
Das obige ist der detaillierte Inhalt vonWarum müssen Sie `gethashcode` überschreiben, wenn Sie' Equals 'überschreiben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!