Rumah >pembangunan bahagian belakang >C++ >Kenapa anda mesti mengatasi `gethashcode` ketika mengatasi` sama`?
overriding dan GetHashCode
untuk perbandingan objek yang konsisten Equals
, adalah penting untuk mengatasi kaedah Equals
. Ini amat penting apabila objek anda digunakan sebagai kunci dalam koleksi berasaskan hash seperti kamus atau set hash. GetHashCode
: Foo
<code class="language-csharp">public override bool Equals(object obj) { // ... comparison logic based on FooId ... }</code>Jika anda menyesuaikan
untuk membandingkan Equals
objek berdasarkan harta Foo
, lalai FooId
(diwarisi dari GetHashCode
) masih akan menghasilkan kod hash berdasarkan alamat memori objek. Ketidakkonsistenan ini membawa kepada tingkah laku yang tidak dapat diramalkan apabila menggunakan objek Object
sebagai kunci dalam jadual hash. Foo
mengapa perkara hashing konsisten
overriding sangat penting untuk: GetHashCode
Equals
GetHashCode
Equals
GetHashCode
pelaksanaan harus sejajar dengan logik kaedah
GetHashCode
Equals
objek yang sama mesti mempunyai kod hash yang sama.
Equals
untuk kelas
Foo
GetHashCode
ini menghasilkan kod hash berdasarkan
<code class="language-csharp">public override int GetHashCode() { return this.FooId.GetHashCode(); }</code>.
FooId
Equals
Menggunakan pembanding tersuai untuk kejelasan yang dipertingkatkan
Apabila mengatasi dan
, pertimbangkan untuk menambah pengendali kesetaraan tersuai ( dan Equals
) untuk kebolehbacaan kod yang lebih baik dan penyelenggaraan. GetHashCode
Atas ialah kandungan terperinci Kenapa anda mesti mengatasi `gethashcode` ketika mengatasi` sama`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!