1-Mavzu 1-Mavzu Reja: Klass a’zolariga ruxsatni boshqarish
// xatoliklardan xoli massiv yaratishda indeksatordan foydalanish
Download 116.94 Kb.
|
dasturiy injinering
// xatoliklardan xoli massiv yaratishda indeksatordan foydalanish..
using System; class FailSoftArray { int[] a; // asosiy massivga havola public int Length; //massivning ochiq uzunlik o'zgaruvchisi public bool ErrFlag; // oxirgi operatsiya bajarilganligini bildiruchi // Belgilangan o`lchamda massiv yaratish. public FailSoftArray(int size) { a = new int[size] ; Length = size; } // Bu FailSoftArray sinfi uchun indeksator. public int this[int index] { // get aksessori. get { if(ok(index) ) { ErrFlag = false; return a[index]; } else { ErrFlag = true; return 0; } } // set aksessor. set { if (ok(index)) { a[index] = value; ErrFlag = false; } else ErrFlag = true; } } // Indeks belgilangan chegaralarda bo'lsa, true mantiqiy qiymatini qaytarish. private bool ok(int index) { if(index >= 0 & index < Length) return true; return false; } } // Xatoliklardan xoli massivni qo`llash. class FSDemo { static void Main() { FailSoftArray fs = new FailSoftArray(); int x; // Yashirin xatolarni aniqlash. Console.WriteLine("Скрытый сбой."); for (int i=0; i < (fs.Length * 2) ; i++) fs[i] = i*10; for(int i=0; i < (fs.Length * 2); i++) { x = fs[i]; if(x != -1) Console.Write(x + " "); } Console.WriteLine (); // Endi xatolarni ko'rsatish. Console.WriteLine("\nСбой с уведомлением об ошибках."); for(int i=0; i < (fs.Length * 2) ; i++) { fs[i] = i*10; if(fs.ErrFlag) Console.WriteLine("fs[" + i + "] вне границ"); } for(int i=0; i < (fs.Length * 2); i++) { x = fs[i]; if(!fs.ErrFlag) Console.Write(x + " "); else Console.WriteLine("fs[" + i + "] вне границ"); } } } Bu dasturning bajarilishi natijasida quyidagi natijalar olinadi. Скрытый сбой. 0 10 20 30 40 0 0 0 0 0 Сбой с уведомлением об ошибках. fs[5] вне границ fs[6] вне границ fs[7] вне границ fs[8] вне границ fs[9] вне границ 0 10 20 30 40 fs[5] вне границ fs[6] вне границ fs[7] вне границ fs[8] вне границ fs[9] вне границ Indeksator massiv chegaralarini buzishga to'sqinlik qiladi. Indeksator kodining har bir qismini diqqat bilan tahlil qilaylik. U keyingi satr bilan boshlanadi. public int this[int index] { Bu qatordagi kod indeksator e'loni kodi bo`lib, int tipidagi elementlar ustida ammalar bajariladi. Indeks index parametri sifatida uzatiladi. Bundan tashqari, indeksator sinf tashqarisidagi kodda ko'rsatkich sifatida foydalanish imkonini berish uchun ochiq(public) deb e'lon qilinadi. Keyingi kodda get aksessorini ko`rib chiqaylik. get { if (ok(index) ) { ErrFlag = false; return a[index]; } else { ErrFlag = true; return 0; } } Birinchi navbatda get aksessori ko`rsatilgan indeks massiv chegarasida belgilanganligini tekshirib yuzaga kelishi mumkin bo`lgan xatolikning oldini oladi. Bu chegarani tekshirish ok() metodida amalga oshiriladi, agar indeks to`g`ri bo`lsa, true mantiqiy to`g`ri qiymatni, aks holda - false mantiqiy yolg`on qiymatni qaytaradi. Shunday qilib, agar belgilangan indeks belgilangan chegaralarda bo'lsa, unda tegishli element ushbu indeksga qaytariladi. Agar indeks belgilangan chegaralardan tashqarida bo'lsa, unda hech qanday operatsiya amalga oshirilmaydi, biroq ayni paytda hech qanday ortiqcha xato bo'lmaydi. Bu holatda FailSoftArray sinfining ErrFlag o'zgaruvchisi har bir operatsiya natijasini o'zida saqlaydi. Uning muvaffaqiyatli yoki muvaffaqiyatsiz bajarilganligini har bir operatsiyadan keyin tekshirish mumkin. Endi massiv chegaralarini buzish xatolari oldini olish uchun set aksessori kodini ko'rib chiqaylik. set { if(ok(index)) { a[index] = value; ErrFlag = false; } else ErrFlag = true; } Agar ok() metodining index parametri belgilangan chegaralar ichida joylashgan bo`lsa, massivning tegishli elementiga value parametriga uzatilgan qiymat o`natiladi. Aks holda, ErrFlag mantiqiy o`zgaruvchisiga true qiymat o'rnatiladi. Eslatib o'tamiz, value har qanday aksessor metoda belgilangan qiymatni o'z ichiga olgan yopiq parametrdir. Uni alohida e'lon qilish shart emas (va mumkin ham emas). Har ikkala get va set aksessorlarning indeksatorda mavjud bo`lishi majburiy emas. Shunday qilib, indeksatorni faqat o'qish uchun yaratsangiz unda faqat bitta aksessor olishingiz yoki indeksatorni faqat bitta aksessor bilan yozish uchun foydalanishingiz mumkin.
Download 116.94 Kb. Do'stlaringiz bilan baham: |
ma'muriyatiga murojaat qiling