C# tilida (har qanday boshqa tilda bo'lgani kabi) ma'lumotlar turi -bu o'zgaruvchining (ob'ektning), doimiy yoki literalning xarakteristikasi bo'lib, uning aniqlanish sohasiga quyidagilar kiradi:
haqiqiy qiymatlar to'plami;
kompyuterda ma'lumotlarni ko'rsatishning ichki shakli;
ma'lum bir tur uchun ruxsat etilgan operatsiyalar to'plami.
C# tilida ma'lumotlar turlarining qanday toifalari (guruhlari) mavjud?
C# dasturlash tilidagi har qanday ma'lumotlar turi class (sinf) yoki struct (tuzilma) bilan ifodalanadi.
Shunga ko'ra, C# tilining barcha ma'lumotlar turlari ikki toifaga (guruhlarga) bo'linadi:
qiymat turlari (value-types).
Qiymat turlari strukturaviy tiplar yoki tayanch tiplar deb ham ataladi. Qiymat turlari tuzilmalar (struct) bilan tavsiflanadi;
havola turlari (reference-types).
Bu ma’lumot turlari sinflar bo'yicha tavsiflanadi.
Qiymat turlari va mos yozuvlar turlarining farqlari nimada?
Siz ma’lumot turlarini (qiymat turlari va havolar turlari) quyidagi usullar bilan farqlashingiz mumkin:
Obyektni (o'zgaruvchini) kompyuter xotirasida saqlash usuli.
Qiymat turlarining obyektlari (o'zgaruvchilari) to'liq stekka joylashtirilgan. Havola turlarining obyektlari quyidagi prinsip bo'yicha joylashtiriladi:
stek ob'ekt ma'lumotlariga havolani o'z ichiga oladi;
ob'ektning "boshqariladigan to'plami" (managed heap) ma'lumotlari (maydonlari) to'g'ridan-to'g'ri joylashtiriladi. Ushbu ma'lumotlar stekka havolani ko’rsatadi.
Stack
Xotira
Qiymat turlari va mos yozuvlar turlarining farqlari nimada?
2. Asosiy turdagi farq .
Qiymat turlari uchun asosiy tur System.ValueType hisoblanadi. Havolar turlari uchun asosiy tur System.ValueType dan tashqari har qanday muhrlanmagan (sealed bo’lmagan) tur bo'lishi mumkin.
Qiymat turlari har doim muhrlangan va shuning uchun ularni meros qilib bo'lmaydi (boshqalar uchun asos bo'ladi). Havola turlari, agar ular muhrlanmagan bo'lsa (sealed sifatida aniqlanmagan) boshqa turlar uchun asos bo'lishi mumkin (ya’ni, meros olish mumkin).
Qiymat turlari va mos yozuvlar turlarining farqlari nimada?
4. Funksiyaga parametrlarni berish usuli.
Qiymat turlarining o'zgaruvchilari qiymat bo'yicha uzatiladi. Bu argument o'zgaruvchisining to'liq nusxasi funksiyaga uzatilganligini anglatadi. Havola turlari bo'lsa, funktsiyaga havolani o'tkazishda faqat havolaning o'zi qiymat bo'yicha ko'chiriladi.
Qiymat turlarini yakunlash shart emas, chunki ular havola turlaridan farqli o'laroq, hech qachon boshqariladigan to'plamga (managed heap) joylashtirilmaydi.
Qiymat turlari va mos yozuvlar turlarining farqlari nimada?
6. O'zgaruvchining mavjud bo'lish vaqti.
Qiymat turlari ular belgilangan kontekstdan tashqariga chiqqanda mavjud bo'lishni to'xtatadi. Havola turlari axlat yig'uvchi (garbage collector) tomonidan yo'q qilinadi.
Qiymat turlari va havola turlarining umumiy tomoni shundaki, konstruktorlar ikkalasi uchun ham aniqlanishi mumkin.
Ma'lumotlar turlarining har bir toifasining mosligi
Turlarning har bir toifasi uchun ulardan foydalanish shartlari belgilanadi. Agar kichik hajmdagi xotira va tezlik muhim bo'lsa, unda qiymat turlaridan foydalanish ko'proq mos keladi. Agar ma'lumotlarni saqlash uchun katta hajmdagi xotira kerak bo'lsa, unda havola turlaridan foydalanish maqsadga muvofiqdir. Buning sababi, “boshqariladigan to'p” (managed heap) stekdan kattaroqdir.