Sobes.tech
Intern

C# dasturlash tilida istisnolar nima?

sobes.tech AI

AIdan javob

C# tilida istisnolar, dastur bajarilishi davomida yuzaga keladigan anomal yoki xatoliklar bo'lib, ularning oqimini buzadi.

Ular xato bilan ishlash kodini dasturiy logikaning asosiy kodidan ajratishga imkon beradi va xatolarni boshqarish uchun yanada tuzilmalangan yondashuvni taqdim etadi.

C# da istisnolarning asosiy jihatlari:

  1. Istisno turlari: C# standart istisno sinflarining ierarxiyasiga ega bo'lib, ular System.Exception asosiy sinfidan meros oladi. Masalan, System.NullReferenceException, System.DivideByZeroException, System.IO.FileNotFoundException. Shuningdek, o'z istisno sinflaringizni yaratishingiz mumkin.
  2. Istisno yaratish (throw): throw kalit so'zi yordamida istisno yaratiladi.
  3. Istisnoni ushlash (try-catch): try bloki istisno yuzaga kelishi mumkin bo'lgan kodni o'z ichiga oladi. catch bloki ma'lum bir istisno turini ushlaydi va uni boshqarish uchun kodni bajaradi.
  4. Finally bloki: finally bloki har doim bajariladi, istisno yuzaga kelgan yoki kelmagan bo'lsa ham. U ko'pincha resurslarni bo'shatish uchun ishlatiladi.
  5. Using operatori: Resurslarni boshqarish uchun qulayroq usul bo'lib, Dispose metodini chaqirishni kafolatlaydi. Bu try-finally tuzilmasiga o'xshaydi, IDisposable interfeysini amalga oshiradigan ob'ektlar uchun.
  6. Istisno filtrlari: catch blokiga shart qo'shish imkonini beradi, bu esa istisnolarni yanada aniqroq boshqarishga yordam beradi.

Misol uchun:

public class Example
{
    public void ProcessData(int denominator)
    {
        try
        {
            int result = 10 / denominator; // DivideByZeroException yuzaga kelishi mumkin
            Console.WriteLine($"Natija: {result}");
        }
        catch (DivideByZeroException ex) // Aniq istisnani ushlaymiz
        {
            Console.WriteLine("Xato: nolga bo'lib bo'lmaydi.");
            // Xatoni log qilish, kerak bo'lsa
            // Console.WriteLine($"Xato tafsilotlari: {ex.Message}");
        }
        catch (Exception ex) // Boshqa istisnalarni ushlaymiz
        {
            Console.WriteLine($"Kutilmagan xato yuz berdi: {ex.Message}");
        }
        finally // Bu blok har doim bajariladi
        {
            Console.WriteLine("Jarayon yakunlandi.");
        }
    }

    public void UsingExample()
    {
        // `using` yordamida avtomatik `Dispose` chaqirilishini misol qilish
        using (StreamReader reader = new StreamReader("file.txt"))
        {
            string line = reader.ReadLine();
            Console.WriteLine(line);
        } // Bu yerda reader.Dispose() avtomatik chaqiriladi, hatto istisno yuzaga kelsa ham
    }

    public void ThrowExample(int value)
    {
        if (value < 0)
        {
            throw new ArgumentOutOfRangeException(nameof(value), "Qiymat musbat bo'lishi kerak."); // O'z istisnomizni yaratish
        }
        // ... keyingi logika
    }
}

Istisnolarni ishlatish, ishonchli, o'qilishi oson va texnik xizmat ko'rsatish uchun qulay bo'lgan dasturlar yaratishga yordam beradi, xato bilan ishlashni asosiy logikadan ajratadi.