5-Mavzu: ref va out parametrlari. Ko’rsatkichli va qiymatli turlar
Download 29.24 Kb.
|
5-Mavzu: ref va out parametrlari. Ko’rsatkichli va qiymatli turlar. C# dasturlash tilida turlar ikkita sinfga bo’linadi: Qiymatli turlar; Ko’rsatkichli turlar. Bu ikkita sinf bir-biridan samaradorligi va xotirada ma’lumotlarni saqlash bilan farq qiladi. Qiymatli turlarni yana strukturali yoki tuzilmali sinflar deb ham atash mumkin. Bunday turdagi ma’lumotlar xotiraning stek deb nomlangan qismida saqlanadi. Stek bu lokal o’zgaruvchilarning qiymatlarini saqlaydigan xotira bo’lagi. Qiymat turlariga quyidagilar kiradi: Butun turlar(byte, sbyte, char, short, ushort, int uint, long, ulong); Suzuvchi nuqtali turlar(float, double); O’nli turlar(Decimal); Rost, yolg’on qiymat qabul qiluvchi tur(bool); Foydalanuvchi tomonidan aniqlangan strukturali(struct); Sanaluvchi turlar(enum). Bunday turdagi o’zgaruvchilarning o’zlashtirgan(qabul qilgan) qiymati shu o’zgaruvchining o’zida saqlanadi. Misol uchun:
Ko’rsatkichli turlar, bunday turdagi o’zgaruvchilar o’zlarida ma’lumot emas, balki shu ma’lumotni ko’rsatuvchi xotira adreslarni saqlaydi, ma’lumotlarning o’zlari esa xotiraning “uyum” deb nomlangan qismida saqlanadi. Xotiraning bu sohasida boshqaruvchi obyektlar joylashadi. Ko’rsatkichli turlarga quyidagilar kiradi: Sinflar(class); Interfeyslar(interface); Delegatlar(delegate); Obyektlar(object); Satrli tur(string). Ko’rsatkichli turlarga doir misol ko’rib chiqamiz:
C# dasturlash tilida o’zgaruvchilarning qiymatlari metodlarga uzatiladi. Bundan ma’lumki, biz metod ichkarisida metodning tashqarisidagi parametrlarni o’zgartira olmaymiz. Misol uchun:
Bu masalani yechish uchun ref kalit so’zidan foydalanamiz. Ref kalit so’zidan foydalanish uchun metodni chaqirishda parameter oldidan ishlatamiz va metodni e’lon qilganda parametrning oldidan yoziladi. Yuqoridagi dasturni quyidagicha o`zgartiramiz:
Ref parametrining xususiyati shundan iboratki, metodni chaqirishdan oldin o’zgaruvchini boshlang’ich qiymat bilan ta’minlash shart, aks holda xatolik yuz beradi. Ref parametriga doir yana bir misol bilan tanishib chiqamiz. Bu misolda yangi metod yaratamiz va bu metodning o’zgaruvchisi son qabul qilsin. Ushbu metodda o’zgaruvchi birga oshiriladi va qiymati chiqariladi. Main() metodida esa xuddi avvalgi nom bilan yangi o’zgaruvchi yaratamiz va uning qiymatini ham chiqaramiz. Natijada testMethod(param) chaqirilgandan keyin Main() metodidagi param o`zgaruvchisining qiymati o`zgarmay qoladi:
Endi quyidagi kodda ref parametrini testMethod metodidagi o’zgaruvchi oldidan qo’llaymiz. Shuni unutmaslik kerakki, metodni chaqirishda ham ref parametrini qo’llash kerak:
Endi dastur natijasi sifatida 11 sonini hosil bo`ladi. Buning sababi, param o’zgaruvchisining xotirada joylashgan joyiga havola qilinganligidadir, shuningdek, testMethod metodida nusxa bilan emas, balki Main() metodidagi param o’zgaruvchisi bilan ishlangan. Bu o’zgarishlarni biz testMethod metodida param o’zgaruvchisi ustida bajardik va bu o’zgarishlar metod tanasidan tashqarida bajarilgan. Endi yana bir marta bu kodga o’zgarishlar kiritamiz. Bu safar ham param o’zgaruvchisini e’lon qilamiz, ammo unga boshlang’ich qiymat bermaymiz, ya’ni int param = 10; satri o’rniga int param; deb yozamiz. Kompilyator boshlang’ich qiymati berilmagan o’zgaruvchidan foydalanishda xatolik beradi. Biz boshlang’ich qiymatga ega bo’lmagan o’zgaruvchidan boshqa metodda foydalanishga va uning ustida belgilangan amallarni bajarishga harakat qilyapmiz, lekin ref yordamida bunday qilib bo’lmaydi. Bunday holatlarda out parametridan foydalanish maqsadga muvofiq:
testMethod() metodida param o’zgaruvchisiga boshlang’ich qiymat berish shart. Ref va out parametrlarini ishlatish orqali xotiradan foydalanish samaradorligi oshiriladi. Download 29.24 Kb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling