Rumah >pembangunan bahagian belakang >C++ >Mengapa mengatasi `gethashcode` penting ketika mengatasi` sama`?
overriding : Akibat yang perlu untuk mengatasi GetHashCode
Equals
dalam kelas, mengatasi Equals
menjadi kritikal. Ini benar terutamanya jika anda berhasrat untuk menggunakan contoh kelas anda sebagai kunci dalam koleksi berasaskan hash seperti kamus atau set hash. GetHashCode
kepentingan GetHashCode
, sering dipandang rendah, memainkan peranan penting dalam menentukan kesamaan. Jika dua objek menghasilkan kod hash yang berbeza, mereka segera dianggap tidak sama rata, tanpa mengira hasil kaedah GetHashCode
. Equals
Konsistensi tingkah laku penting
kaedah mesti sejajar dengan logik kaedah GetHashCode
, mematuhi peraturan ini: Equals
Equals(...) == true
mengembalikan kod hash yang sama.
Jika dua objek mempunyai kod hash yang sama, mereka tidak semestinya Equals
GetHashCode
Semasa mengembalikan kod hash medan tunggal (seperti "fooid" dalam contoh) mungkin cukup dalam kes -kes yang mudah, pendekatan yang lebih mantap diperlukan apabila pelbagai sifat menyumbang kepada kesamaan. Teknik yang sama adalah untuk menggabungkan kod hash sifat -sifat ini:
kerangka moden sering menyediakan kelas penolong (seperti
dalam beberapa bahasa) untuk memudahkan proses ini.<code class="language-csharp">int hash = 13; hash = (hash * 7) + field1.GetHashCode(); hash = (hash * 7) + field2.GetHashCode(); // ... add more fields as needed return hash;</code>
HashCode
melengkapkan gambar: Operator overloads
Untuk kebolehbacaan kod yang dipertingkatkan dan pengalaman pemaju, pertimbangkan juga mengatasi pengendali dan
untuk melengkapkan dan ==
.
Atas ialah kandungan terperinci Mengapa mengatasi `gethashcode` penting ketika mengatasi` sama`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!