Object.GetHashCode Metode
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Berfungsi sebagai fungsi hash default.
public:
virtual int GetHashCode();
public virtual int GetHashCode ();
abstract member GetHashCode : unit -> int
override this.GetHashCode : unit -> int
Public Overridable Function GetHashCode () As Integer
Mengembalikan
Kode hash untuk objek saat ini.
Keterangan
Untuk informasi selengkapnya tentang API ini, lihat Keterangan API Tambahan untuk Object.GetHashCode.
Catatan Bagi Inheritor
Fungsi hash digunakan untuk menghasilkan angka (kode hash) dengan cepat yang sesuai dengan nilai objek. Fungsi hash biasanya khusus untuk setiap jenis dan, untuk keunikan, harus menggunakan setidaknya salah satu bidang instans sebagai input. Kode hash tidak boleh dihitung dengan menggunakan nilai bidang statis.
Untuk kelas yang berasal dari Object, GetHashCode
metode dapat mendelegasikan ke implementasi kelas GetHashCode() dasar hanya jika kelas turunan mendefinisikan kesetaraan menjadi kesetaraan referensi. Implementasi GetHashCode() default untuk jenis referensi mengembalikan kode hash yang setara dengan yang dikembalikan oleh GetHashCode(Object) metode . Anda dapat mengganti GetHashCode() jenis referensi yang tidak dapat diubah. Secara umum, untuk jenis referensi yang dapat diubah, Anda harus mengambil alih GetHashCode() hanya jika:
Anda dapat menghitung kode hash dari bidang yang tidak dapat diubah; Atau
Anda dapat memastikan bahwa kode hash objek yang dapat diubah tidak berubah saat objek terkandung dalam koleksi yang bergantung pada kode hashnya.
Jika tidak, Anda mungkin berpikir bahwa objek yang dapat diubah hilang dalam tabel hash. Jika Anda memilih untuk mengganti GetHashCode() jenis referensi yang dapat diubah, dokumentasi Anda harus memperjelas bahwa pengguna jenis Anda tidak boleh mengubah nilai objek saat objek disimpan dalam tabel hash.
Untuk jenis nilai, GetHashCode() menyediakan implementasi kode hash default yang menggunakan pantulan. Anda harus mempertimbangkan untuk mengambil alihnya untuk performa yang lebih baik.
Untuk informasi selengkapnya dan contoh yang menghitung kode hash dengan berbagai cara, lihat bagian Contoh.
Fungsi hash harus memiliki properti berikut:
Jika dua objek dibandingkan sebagai sama, GetHashCode() metode untuk setiap objek harus mengembalikan nilai yang sama. Namun, jika dua objek tidak dibandingkan sebagai sama, GetHashCode() metode untuk dua objek tidak harus mengembalikan nilai yang berbeda.
Metode GetHashCode() untuk objek harus secara konsisten mengembalikan kode hash yang sama selama tidak ada modifikasi pada status objek yang menentukan nilai pengembalian metode System.Object.Equals objek. Perhatikan bahwa ini hanya berlaku untuk eksekusi aplikasi saat ini, dan bahwa kode hash yang berbeda dapat dikembalikan jika aplikasi dijalankan lagi.
Untuk performa terbaik, fungsi hash harus menghasilkan distribusi yang merata untuk semua input, termasuk input yang sangat terkluster. Implikasinya adalah bahwa modifikasi kecil pada status objek harus menghasilkan modifikasi besar pada kode hash yang dihasilkan untuk performa tabel hash terbaik.
Fungsi hash harus murah untuk komputasi.
Metode GetHashCode() ini tidak boleh melemparkan pengecualian.
Misalnya, implementasi GetHashCode() metode yang disediakan oleh String kelas mengembalikan kode hash yang identik untuk nilai string yang identik. Oleh karena itu, dua String objek mengembalikan kode hash yang sama jika mewakili nilai string yang sama. Selain itu, metode ini menggunakan semua karakter dalam string untuk menghasilkan output yang didistribusikan secara cukup acak, bahkan ketika input diklusterkan dalam rentang tertentu (misalnya, banyak pengguna mungkin memiliki string yang hanya berisi 128 karakter ASCII yang lebih rendah, meskipun string dapat berisi salah satu dari 65.535 karakter Unicode).
Menyediakan fungsi hash yang baik pada kelas dapat secara signifikan memengaruhi performa penambahan objek tersebut ke tabel hash. Dalam tabel hash dengan kunci yang menyediakan implementasi fungsi hash yang baik, mencari elemen membutuhkan waktu konstan (misalnya, operasi O(1). Dalam tabel hash dengan implementasi fungsi hash yang buruk, performa pencarian tergantung pada jumlah item dalam tabel hash (misalnya, operasi O(n
), di mana n
adalah jumlah item dalam tabel hash). Pengguna jahat dapat memasukkan data yang meningkatkan jumlah tabrakan, yang dapat secara signifikan menurunkan performa aplikasi yang bergantung pada tabel hash, dalam kondisi berikut:
Ketika fungsi hash menghasilkan tabrakan yang sering.
Ketika proporsi besar objek dalam tabel hash menghasilkan kode hash yang sama atau kira-kira sama satu sama lain.
Saat pengguna memasukkan data dari mana kode hash dihitung.
Kelas turunan yang mengambil GetHashCode() alih juga harus mengambil alih Equals(Object) untuk menjamin bahwa dua objek yang dianggap sama memiliki kode hash yang sama; jika tidak, jenis tersebut Hashtable mungkin tidak berfungsi dengan benar.