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


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

Toifa parametrlarini aniqlash
Almashtir () metodiga o’xshash umumlashgan metodlarni chaqirishda toifa parametrini tashlab yozish ham mumkin, faqat va faqat agarda umumlashgan metodning argumentlari bor bo’lsa, chunki bu holda kompilyator parameter a’zolar asosida toifa parametrini aniqlay oladi. Masalan, Main() metodiga ushbu kodni qo’shib, System.Boolean qiymatlarini o’rinlarini almashtirish mumkin:
// Kompilyator System.Boolean toifasini o’zi topadi (aniqlaydi)
bool b1 = true, b2 = false;
Console.WriteLine("Almashishdan oldin: {0}, {1}", b1, b2) ;
Almashtir (ref b1, ref b2);
Console.WriteLine("Almashishdan keyin: {0}, {1}", b1, b2);

Kompilyator b1 va b2 larning e’lonlaridagi ma’lumotlarning toifalari asosida toifa parametrini aniqlay olsa ham, siz toifa parametrini oshkora ko’rsatishni o’zingizga odat qilib olishingiz zarur:
Almashtir (ref b1, ref b2); // yoki
Almashtir (ref b1, ref b2); // kabi

Bunday yondashuv boshqa dasturchilarga metodning aslida umumlashgan ekanini tushunishlariga imkon beradi. Bundan tashqari, toifa parametrlarini aniqlash faqat umumlashgan metod kamida bitta parametr qabul qiladigan hollardagina amalga oshiriladi. Masalan, Program sinfida AsosSinfniKorsat() degan umumlashgan metod aniqlangan bo’lsin:
static void AsosSinfniKorsat ()
{
Console.WriteLine("{0} ning asos sinfi {1} dir.",
typeof(T), typeof(T).BaseType);
}

Bu metodni chaqirishda toifa parametrini ko’rsatish talab etiladi, ya’ni bu holda tashlab ketishga ruzsat yo’q:
static void Main(string [ ] args)
{ // Agar metod parametrlar qabul qilmasa, toifa parametric ko’rsatilishi shart
AsosSinfniKorsat () ;
AsosSinfniKorsat ();

// Kompilyatsiya bosqichida xatolik! Parametrlar yo’qmi?
// Demak, to’ldiruvchi taqdim etilishi shart!
// AsosSinfniKorsat ();
Console.ReadLine();
}

Hozir Almashtir va AsosSinfniKorsat umumlashgan metodlari Program sinfida a’zo-metodlar sifatida aniqlangan holda turibdi. Albatta, boshqa har qanday metod kabi, siz bu a’zolarni alohida sinfda (MeningUmumMetodlarim sinfida) aniqlashingiz ham mumkin, agar shuni ma’qul ko’rsangiz:
public static class MeningUmumMetodlarim
{ public static void Almashtir (ref T a, ref T b)
{
Console.WriteLine("Siz Almashtir () metodiga {0} berdingiz ", typeof(T));
T temp = a;
a = b;
b = temp;
}
public static void AsosSinfniKorsat ()
{
Console.WriteLine("{0} ning asos sinfi {1} dir.", typeof(T), typeof(T).BaseType);
}
}

Bu yangi statik sinf ichidagi Almashtir va AsosSinfniKorsat statik metodlari shu yangi sinf ta’sir hududida bo’lgani uchun, sinf toifasi albatta ko’rsatilishi shart:
MeningUmumMetodlarim. Almashtir (ref a, ref b) ;
Albatta, bu metodlar statik bo’lishi shart emas edi o’zi. Agar Almashtir va AsosSinfniKorsat nusxa sathidagi metodlar bo’lganida (va nostatik sinfda aniqlanganida) edi, unda biz MeningUmumMetodlarim ning nusxasini yaratishimizga va ularni ob’yekt o’zgaruvchisidan foydalangan holda chaqirishimizga to’g’ri kelgan bo’lur edi:

Download 0.77 Mb.

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




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