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


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

object.ReferenceEquals(p3, p4));
}

Ma’ruza 03 (29)
Mavzu: Umumlashgan turlar. Umumlashgan sinflar e’lon qilish va ob’yektlari bilan ishlash

Reja:

  1. Maxsus umumlashgan metodlar yaratish

  2. Toifa parametrlarini aniqlash

  3. Maxsus umumlashgan strukturalar va sinflarni yaratish

  4. Umumlashgan kodda default kalit so’zi

  5. Toifa parametrlarini cheklash

  6. where kalit so’zini ishlatishga oid misollar

Maxsus umumlashgan metodlar yaratish
Dastur yaratuvchilarning aksariyati odatda bazaviy sinflar kutubxonalarida mavjud bo’lgan umumlashgan turlarni qo’lashiga qaramay, C# dasturlash tilida o’zlarining umumlashgan metodlari va maxsus umumlashgan turlarni (toifalarni) yaratish imkoni ham bor. O’z loyihalarimizga qanday qilib bunday umumlashmalarni kiritishni ko’rib chiqaylik. Birinchi galda biz umumlashgan almashtirish metodini quramiz. UmumlashganMetodlar degan yangi konsol ilovasi loyihasini yaratishdan boshlaymiz.
Maxsus umumlashgan metodlarni qurish metodlarni ananaviy peregruzka qilishning rivojlantirilgan versiyasidir. Biz bilamizki, metodni peregruzka qilish bitta metodning biri-biridan parametrlarning miqdori yoki toifasi bilan farq qiluvchi bir qancha versiyalarini yaratishni anglatar edi.
Peregruzka ob’yektga mo’ljallangan tilning foydali vositasi bo’lsa-da, muammo shundaki, buning natijasida amalda bitta ishni bajaruvchi metodlarning ulkan miqdorini osongina hosil qilish mumkin, ya’ni ish ko’payib ketishi mumkin. Masalan, oddiy usulda ma’lumotlarning ikki qismi joylarini almashtiruvchi metodlar yaratish lozim bo’lsin. Dastlab butun qiymatlar bilan ishlovchi metodni yozish mumkin:
// Ikki butun qiymatlarni o’rnini almashtirish
static void Almashtir(ref int a, ref int b)
{
int temp = a;
a = b;
b = temp;
}

Hozircha hammasi yaxshi. Lekin endi ikkita Xodim ob’yektlarining ham joylarini almshtirishga ehtiyoj tug’ildi deb faraz qilaylik; bu ish Almashtir metodining yangi versiyasini yaratishni talab etadi:
// Ikki Xodim ob’yektining o’rnini almashtirish
static void Almashtir (ref Person a, ref Person b)
{
Person temp = a;
a = b;
b = temp;
}

Siz endi bu yo’nalishdagi ishlar nima bilan tugashini tushunayotgan bo’lsangiz kerak. Agar haqiqiy sonlarni ifodalovchi ikkita suzuvchi nuqtali (double) qiymatlarning o’rnini almashtirish kerak bo’lib qolsayam, ikkita rasmning o’rnini almashtirishga to’g’ri kelib qolsayam, ikkita tugmaning o’rnini almashtirishga to’g’ri kelib qolsayam, xullas, yana allambalo ikita narsaning o’rnini almashtirishga to’g’ri kelib qolsayam, yuqoridagi kabi qo’shimcha metodlar yozish kerak bo’ladi, bu esa oqibatda haqiqiy bosh og’rig’iga aylanadi. Aynan mana shunday vaziyatlarda umumlashgan metodlar yaratish juda qo’l keladi.
Faqat kiruvchi argumentlari bilan farq qiluvchi peregruzka qilingan metodlarning mavjudligi – umumlahsmalar vaziyatni yengillashtirishi mumkinligining oydin alomatidir. T turga mansub ikki qiymatning o’rnini almashtirishga qodir quyidagi umumlashgan Almashtir metodini ko’rib chiqaylik:
// Bu metod parametrda ko’rsatilgan turdagi 2 elementni almashtiradi
static void Almashtir (ref Т a, ref Т b) {
Console.WriteLine("Siz Almashtir () metodiga {0} berdingiz”, typeof(T) ) ;
T temp = a;
a = b;
b = temp;
}

Bu umumlashgan metodning aniqlanishi metodning nomidan keyin, lekin parametrlar ro’xatidan oldin tur parametrini ko’rsatish orqali amalga oshirilganiga e’tibor bering. Bu bilan Almashtir () metodi T toifaga mansub istalgan ikkita T turdagi parameter bilan ishlay olishi joriy etilmoqda. Biroz qiziqarliroq bo’lishi uchun T toifaning o’rnida keladigan toifaning asl nomini C# tilining typeof() amalidan foydalanib ekranga chiqarish ham qo’shib qo’ildi. Butun va satr qiymatlarning o’rnini almashtiruvchi quyidagi Main() metodiga bir nazar tashlaylik:
static void Main(string[] args)
{
Console.WriteLine ("***** Maxsus umumlashgan metodlar *****\n");
// Ikki butun qiymatni almashtirish
int а = 10, b = 90;
Console.WriteLine("Almashishdan oldin: {0}, {1}", a, b) ;
Almashtir (ref a, ref b);
Console.WriteLine("Almashishdan keyin: {0}, {1}", a, b) ;
Console.WriteLine();
// Ikki satr qiymatni almashtirish
string s1 = "Salom", s2 = "Do’stlar";
Console.WriteLine ( " Almashishdan oldin: {0} {1}!", s1, s2) ;
Almashtir (ref s1, ref s2);
Console.WriteLine("Almashishdan keyin: {0} {1}!", si, s2);
Console.ReadLine();
}

Mana, bu dasturning nimani chiqarishi:
***** Maxsus umumlashgan metodlar *****
Almashishdan oldin: 10, 90
Siz Almashtir () metodiga System.Int32 berdingiz
Almashishdan keyin: 90, 10
Almashishdan oldin: Salom Do’stlar!
Siz Almashtir () metodiga System.String berdingiz
Almashishdan keyin: Do’stlar Salom!

Bunday yondashuvning afzalligi shundaki, faqat bittagina Almashtir () versiyasini qo’llashga to’g’ri keladi xolos. Lekin bu metod ihtiyoriy turdagi ikki qiymat bilan ishlayveradi. Yanayam yaxshi jixati – stekda turgan elementlar stekda, uyumda turgan elementlar uyumda qolaveradi.



Download 0.77 Mb.

Do'stlaringiz bilan baham:
1   ...   7   8   9   10   11   12   13   14   ...   50




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