Interfeys toifalari tushunchasi Interfeys toifalarni abstract bazaviy sinflar bilan taqqoslash Maxsus interfeyslarni kiritish


System.Object.GetHashCode () metodini qayta aniqlash


Download 0.77 Mb.
bet9/50
Sana26.01.2023
Hajmi0.77 Mb.
#1129439
1   ...   5   6   7   8   9   10   11   12   ...   50
Bog'liq
MAVZULAR UMUMIY

System.Object.GetHashCode () metodini qayta aniqlash
Sinfda Equals () metodi qayta aniqlanganida siz GetHashCode() metodining standart realizatsiyasini ham qayta aniqlashingiz lozim bo’ladi. Sodda qilib aytganda, hesh kod – ob’yektni maxsus holat sifatida taqdim etuvchi sonli qiymatdir. Masalan, agar siz Hello qiymatni saqlovchi string toifasiga mansub ikkita o’zgaruvchini yaratsangiz, u holda ular ayni bitta hesh-kod berishi lozim. Biroq agar ulardan biri satr qiymatni quyi registrda (hello) saqlayotgan bo’lsa, u holda turli hesh-kodlar olinishi kerak. Hesh-qiymatni qaytarish uchun System.Object.GetHashCode() metodi kelishuvga ko’ra ob’yekt joylashgan joriy xotira yacheykasi adresini qo’llaydi. Shunga qaramay, agar siz Hashtable (System.Collection ismlar fazosidagi) toifasi nusxasida saqlanishi lozim bo’lgan maxsus toifa qurayotgan bo’lsangiz, unda doim mazkur a’zono qayta aniqlashingiz zarur bo’ladi, chinki ob’yektni olish uchun Hashtable toifasi Equals() va GetHashCode() metodlarini chaqiradi.
Diqqat qiling! (На заметку!) Aniqroq aytganda, System.Collections.Hashtable sinfi ob’yektning egallagan joyi haqida umumiy ma’lumotni olish uchun ichki tartibda GetHashCode() metodini chaqiradi, shundan so’ng Equals() metodini (ichki) chaqirish orqali uni (ya’ni ob’yektni) to’la aniqlaydi.
Garchi biz Person ob’yektlarini System.Collections.Hashtable ga joylamoqchi bo’lmayotgan bo’lsak ham, bayonimiz to’laligi uchun keeling shu GetHashCode() metodini ham qayta aniqlaylik. Hesh-kodni yaratish uchun qo’llanadigan juda ko’p algoritmlar mavjud, juda g’aroyiblaridan tortib unchalik emaslarigacha. Ko’p vaziyatlarda System.String sinfining GetHashCode() metodi realizatsiyasiga asoslanib hesh-kod qiymatini yaratish imkoni bor.
String sinfi hesh-qiymatni hisoblash uchun String ob’yekti belgi ma’lumotlarini ishlatuvchi samarali heshlashtirish algoritmiga egaligini inobatga olib, siz GetHashCode() metodini ma’lumotlar maydonlarining hamma nusxalarda unikal bo’lishi shart bo’lgan (sotsial sug’urta kartochkasining raqami kabi) qismi bilan chaqirishingiz mumkin, agar shunday qismni identifikatsiya qilishga muvaffaq bo’linsa. Shunday qilib, agar Person sinfida SSN xossasi kiritilsa, u holda GetHashCode() metodini quyidagicha qayta aniqlash mumkin:
// SNN degan xossa bor deb faraz qilaylik
class Person
{
public string SSN {get; set;} = “”;
// Unikal satr ma’lumotlar asosida hesh-kod qaytarish
public override int GetHashCode ()
{
return SSN.GetHashCode ();
}
}
Agar unikal satr ma’lumotlarni tanlashning iloji bo’lmasa-yu, lekin ToString() qayta aniqlangan metodi bor bo’lsa, u holda GetHashCode() metodini o’z satr ifodasida chaqirish mumkin:
// Hesh-kodni ToString() metodi qaytargan qiymat asosida
// Person ob’yekti uchun hisoblash
public override int GetHashCode()
{
return this.ToString().GetHashCode()
}


Download 0.77 Mb.

Do'stlaringiz bilan baham:
1   ...   5   6   7   8   9   10   11   12   ...   50




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling