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


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

FirstName = fName;
LastName = IName;
Age = personAge;
}
public Person() { }
}
System.Object.ToString() metodini qayta aniqlash
Toifa nusxasi joriy holatining matnli isodasi satrini qaytarish uchun ToString() metodini qayta aniqlashdan yaratilayotgan sinflar (va strukturalar) ning ko’pchiligi katta imtiyozlarni chiqara oladi. Bulardan tashqari, bu narsa otladka paytida ham juda foydalidir. Natija sifatida qanday satrni qurish – bu sizning ihtiyoringizdagi tanlov; biroq tavsiya etilayotgan yondashuv “ism-qiymat” juftligini bir-biridan ikki nuqta orqali ajratishni va butun satrni kvadrat qavslar ichiga joylashni nazarda tutadi (bu tamoyilga .NET bazaviy kutubxonasidagi ko’p toifalar amal qiladi). Person sinfi uchun ToString() ning quyidagi qayta aniqlangan versiyasiga bir qarang:
public override string ToString() =>
$”[First Name: {FirstName}; Last Name: {LastName}; Age : {Age} ]”
Bu ToString() metodining keltirilgan mazkur realizatsiyasi juda oddiydir, chunki Person sinfi holat ma’lumotlarining faqat uchta bo’lagiga ega xolos. Shunga qaramay, yodda tutish joizki, ToString() ni to’g’ri qayta aniqlash yuqorida vorislik zanjiri bilan kiritilgan barcha ma’lumotlarni ham inobatga olishi kerak.
Bu ToString() metodini maxsus bazaviy sinfni kengaytiruvchi sinf uchun qayta aniqlashda birinchi navbatda ajdod sinf uchun ToString() qaytaradigan qiymatni olish zarur, base kalit so’zidan foydalanib. Ajdod sinfning satriy ma’lumotlari olinganidan so’ng ularni voris sinfning maxsus axboroti bilan to’ldirish mumkin bo’ladi.

System.Object.Equals() metodini qayta aniqlash
Keling endi qiymatlar asosidagi sementika bilan ishlaydigan qilib Object.Equals() metodining xulq-atvorini qayta aniqlaylik. Yodingizda bo’lsa, Equals() metodi kelishuvga ko’ra taqqoslanuvchi ob’yektlar ob’yektning xotiradagi ayni bir nusxasiga ishora qilgandagina true qiymatni qaytaradi. Agar ikkita taqqoslanayotgan ob’yekt ayni bir xil holat qiymatlariga (masalan, familiya, ism va yosh) ega bo’lganidagina true qiymat qaytaradigan Equals() metodini realizatsiya qilish Person sonfi uchun foydali bo’lishi mumkin.
Avvalo, Equals() metodining kirish argumenti System.Object umumiy toifasiga mansub ekaniga diqqat qiling. Shu bois birinchi navbatda chaqiruvchi kod chindan ham Person toifasining nusxasini uzatganiga ishonch hosil qilmoq kerak, shuningdek, har ehtimolga qarshi kirish parametrining null ga ishora qilmasligini ham tekshirish kerak.
Chaqiruvchi kod Person toifasining ajratilgan nusxasini uzatganligini aniqlaganingizdan so’ng, yondashuvlarning biri sifatida Equals() metodining kiruvchi ob’yekt ma’lumotlarini joriy ob’yekt ma’lumotlari bilan maydonma-maydon taqqoslovchi realizatsiyasini taqdim etish mumkin:
public override bool Equals(object obj)
{
if (obj is Person && obj != null)
{
Person temp;
temp = (Person)obj;
if (temp.FirstName == this.FirstName
&& temp.LastName == this.LastName
&& temp.Age == this.Age)
{
return true;
}
else
{
return false;
}
}
return false;
}
Bu yerda kiruvchi ob’yekt qiymatlarini joriy ob’yekt qiymatlari bilan taqqoslash amalga oshirilmoqda (this kalit so’zi qo’llanishiga ahamiyat bering). Agar ism, familiya va yosh ikkala ob’yektda bir xil bo’lsa, u holda bu ob’yektlar bir xil holatga ega va shu bois true qiymati qaytariladi. Boshqa barcha natijalar false qiymati qaytarilishiga olib keladi.
Garchi bunday yondashuv to’g’ri ishlasa ham, Equals() maxsus metodini tarkibida o’nlab ma’lumot maydonlari bo’lgan odiiy bo’lmagan toifalar uchun realizatsiya qilish qanchalik qiyinligini tasavvur qilish mumkin. Keng tarqalgan qisqartirish o’zingiz realizatsiya qilgan ToString() metodidan foydalanishni nazarda tutadi. Agar sinf ToString() metodining vorizlik zanjiri bo’ylab tepadagi barcha maydonlar ma’lumlotlarini inobatga oluvchi qulay realizatsiyasiga ega bo’lsa, u holda ob’yektlarning satr ma’lumotlarini oddiygina taqqoslash mumkin bio’ladi (null ga tenglik tekshirib ko’rilgach):
// obj ni endi Person toifasiga keltirishning hojati yo’q, chunki
// barcha toifalarda ToString() metodi mavjud
public override bool Equals(object obj) => obj?.ToString() == ToString();
Bu holda kirish argumentini korrekt (to’g’ri) toifaga (bizning misolda Person ga) tegishliligini tekshirishga hojat yo’q, chunki ToString() metodini .NETning barcha toifalari qo’llab quvvatlaydi. Yanayam yaxshisi shuki, tenglikka tekshirishni endi xossama-xossa amalga oshirish talab etilmaydi, chunki endi ToString() metodining qaytaradigan qiymatlari tekshiriladi, xolos.


Download 0.77 Mb.

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




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