Mavzu: umumlashgan sinflar yaratish va ishlatish


Download 1.41 Mb.
bet1/3
Sana17.06.2023
Hajmi1.41 Mb.
#1544790
  1   2   3
Bog'liq
Mavzu C# da umumlashgan sinflar yaratish va foydalanish


MAVZU: UMUMLASHGAN SINFLAR YARATISH VA ISHLATISH
REJA:

  1. Umumlashgan tur tushunchasi

  2. Umumlashgan turni e’lon qilish.

  3. Umumlashgan turda boshlang’ich standart qiymatlardan foydalanish.

  4. Umumlashgan sinflarning statik maydonlari.

  5. Bir nechta universal parametrlardan foydalanish.

  6. Umumlashgan metodlar.

  7. Adabiyotlar ro’yhati.

Ma’lumki C# dasturlash tilida o’zgaruvchilar yoki metodlar qaysidir ma’lumotlar turiga mansub bo’ladi. Masalan, int, double, string va hakazo. Odatda C# da bunday ma’lumotlar turlaridan tashqari umumlashgan (generics) ma’lumotlar turlari va umumlashgan metodlardan ham foydalaniladi. C# da umumlashgan tur tushunchasini mohiyatini anglash uchun avval umumlashgan tur hosil bo’lishiga sabab bo’lgan muammoni ko’rib chiqamiz.





Keling, bir misolni ko’rib chiqaylik. Biror shaxsni tavsiflovchi Person sinfini qaraylik:
Bu yerda Id - shaxsning unikal identifikatori, Sum - esa hisob raqami bo’lsin. Ko’rib turganingizdek har ikkala xossa int tipiga tegishli.
Identifikatorlarni ifodalashda string satrli ma’lumotlar tipidan ham foydalanish mumkin.
Sonli va satrli qiymatlarning ham ijobiy, ham salbiy tomonlari mavjud.
Person sinfini yaratishda identifikatorni saqlash qaysi ma’lumot tipini tanlashni bilmasligimiz mumkin: sonlimi yoki satrli?
Dasturchi mazkur sinfdan foydalanuvchilar turli bo’lib, ularni har biri shaxsiy fikrga egaligini doimo hisobga olishi zarur.



Muammoning dastlabki yechimi sifatida Id xossani object turidagi xossa sifatida aniqlashimiz mumkin:


object turi universal tur bo’lib, undan barcha turlar meros bo’lib o’tadi. Shuning uchun biz satrni ham, sonni ham ushbu turdagi xossa sifatida saqlashimiz mumkin.


Endi yangilangan Person sinfidan foydalanaylik:



Bir qarashda hammasi joyidagidek tuyuladi. Ya’ni muammoga yechim topildi.
Lekin bu yechim optimal yechim emas!
obj1.Id = 5774; // bu satrda int turi object turiga yig’ilyapti(boxing).
int Id1 = (int) obj1.Id; // bu satrda object turi int turiga yoyilyapti(unboxing).
boxing - biror qiymatli turdagi ob’yektni (masalan, int turidagi)
object turiga o’tkazadi.
unboxing - object turidagi ob’yektni biror qiymatli turdagi ob’yektga o’tkazadi.
boxing va unboxing dasturning ishlash samaradorligini pasaytiradi, chunki sistema kerakli o’zgarishlarni amalga oshirishi kerak.
Hulosa. Biz topgan yechim unchalik foydali emas!

Bundan tashqari, yana bir muammo bor - turdagi xavfsizlik muammosi:



Download 1.41 Mb.

Do'stlaringiz bilan baham:
  1   2   3




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