C# -da istisnolardan foydalanish to'rtta kalit so'zlar bilan tashkil etilgan: try, catch, throw va finally. Ular o'zaro bog'liq kichik tizimni tashkil qiladi, unda kalit so'zlardan biri boshqasini ishlatishni nazarda tutadi. Yuqoridagi har bir kalit so'zning maqsadi va qo'llanilishi batafsil muhokama qilib chiqamiz. Avvalo, siz ularning har birining istisnolardan foydalanishdagi roli haqida umumiy tushuncha beramiz. Shuning uchun ularning ishlash printsipi quyida qisqacha tavsiflanadi. Istisno holatlarini kuzatish kerak bo'lgan dastur bayonotlari try blokiga kiritilgan. Agar istisno try bloki ichida ro'y bersa, istisno tashlanadi. Ushbu istisno dastur kalit kodida tutish so'zi bilan belgilangan bayonot yordamida qandaydir ratsional tarzda qo'llanishi va ko'rib chiqilishi mumkin. Tizim bo'yicha istisnolar avtomatik ravishda ish vaqti tizimi tomonidan yaratiladi. Throw kalit so'zi istisnolarni qo'lda yaratish uchun ishlatiladi. Try blokidan chiqqandan keyin bajarilishi kerak bo'lgan har qanday kod finally blokga joylashtirilgan.
try va catch kalit so'zlaridan foydalanish
C# istisnosiz ishlashning asosiy qismi try va catch kalit so'zlar juftligi. Ushbu kalit so'zlar birgalikda ishlaydi va ularni alohida ishlatib bo'lmaydi. Quyida istisnolarni boshqarish uchun try / catch bloklarini aniqlashning umumiy shakli keltirilgan:
try
{
// Xatolarni tekshirish uchun kod bloki.
}
catch {ExcepTypel exOb)
{
// ExcepTypel turidagi istisno ishlovchisi.
}
catch {ExcepType2 exOb)
{
ExcepType2 turidagi istisno ishlovchisi.
}
bu yerda ExcepType - tashlanadigan istisno turi. Istisno try operatori tomonidan tashlanganida, u juftlikni ushlanib qoladi, keyin istisnoga ishlov beradi. Istisno turiga qarab, tegishli catch operatori ham bajariladi. Shunday qilib, agar tashlangan istisno turlari va catch blokida ko'rsatilganlar mos keladigan bo'lsa, u holda bu blok bajariladi va qolganlari o'tkazib yuboriladi. Istisno ushlanganda, istisno exOb o'zgaruvchisi o'z qiymatini oladi. Oddiy istisnolardan foydalanish misoli Istisno holatini kuzatish va ushlashni namoyish etish uchun oddiy misolni ko'rib chiqamiz. Bizga ma’lumki, massivni chegaralaridan tashqarida indeksatsiya qilishga urinish xatoga olib keladi. Ushbu xato yuzaga kelganda, CLR .NET Framework uchun belgilangan IndexOutOf RangeExceptionni tashlaydi. Quyidagi dasturda bunday istisno tashlanadi va keyin ushlanadi.
namespace UzbekDevs
{
class ExcDemol
{
static void Main()
{
int[] nums = new int[4];
try
{
Console.WriteLine("Istisno qilishdan oldin.");
// Massiv chegaralaridan tashqari indeks tufayli istisnolarni tashlang,
for (int i = 0; i < 10; i++)
{
nums[i] = i; Console.WriteLine("nums[{0}]: {1}", i, nums[i]);
}
Console.WriteLine("Chiqib olinishi mumkin emas");
}
catch (IndexOutOfRangeException)
{
// Istisnoni qo'lga oling.
Console.WriteLine("Massiv chegaralaridan tashqarida indeks!");
}
Console.WriteLine("Istisnoga to'sqinlik qilgandan keyin.");
Console.ReadKey();
}
}
}
Ushbu dastur quyidagi natijani beradi.