Sobes.tech
Intern

რა არის გამონაკლისები C# პროგრამირების ენაში?

sobes.tech AI

პასუხი AI-სგან

C# тилиндеги чыгымдар — бул программа ишке ашырылуу учурунда пайда болгон аномалиялар же ката, алар анын нормалдуу агымын бузат.

Алар ката иштетүү кодун негизги логика кодуна бөлүп, ката башкарууну структуралаштырылган жол менен жүргүзүүгө мүмкүндүк берет.

C# тилиндеги чыгымдардын негизги аспектилери:

  1. Типтери: C# стандарттык чыгымдар класстарынын хиерархиясына ээ, алар System.Exception негизги класынан мурас алат. Мисалы, System.NullReferenceException, System.DivideByZeroException, System.IO.FileNotFoundException. Өзгөчө чыгымдар класстарын да түзүүгө болот.
  2. Чыгымдарды түзүү (throw): Чыгым throw ачкыч сөзү аркылуу түзүлөт.
  3. Чыгымдарды кармоо (try-catch): try блогу чыгым түзө алчу кодду камтыйт. catch блогу белгилүү бир чыгым түрүн кармайт жана аны иштетүү кодун аткарат.
  4. Акыркы блок (finally): finally блогу дайыма аткарылат, чыгым пайда болгон же болбогон учурда да. Ал ресурстарды бошотуу үчүн колдонулат.
  5. using оператору: Ресурстарды башкаруунун ыңгайлуу жолу, ал Dispose методу чакырылышын кепилдейт. Бул try-finally структурасына окшош IDisposable интерфейсин ишке ашырган объекттер үчүн.
  6. Чыгымдар фильтрлери: catch блогуна шарт кошууга мүмкүндүк берет, чыгымдарга карата так иштетүү үчүн.

Куллануу мисалы:

public class Example
{
    public void ProcessData(int denominator)
    {
        try
        {
            int result = 10 / denominator; // Мүмкүнчүлүк бар, DivideByZeroException түзүү
            Console.WriteLine($"Натыйжа: {result}");
        }
        catch (DivideByZeroException ex) // Конкреттүү чыгымды кароо
        {
            Console.WriteLine("Ката: нөлгө бөлүү мүмкүн эмес.");
            // Чыгымды каттоо, керек болсо
            // Console.WriteLine($"Чыгымдын деталдары: {ex.Message}");
        }
        catch (Exception ex) // Башка бардык чыгымдарды кармоо
        {
            Console.WriteLine($"Күтүлбөгөн ката: {ex.Message}");
        }
        finally // Бул блок дайыма аткарылат
        {
            Console.WriteLine("Иш аяктады.");
        }
    }

    public void UsingExample()
    {
        // `using` колдонуу мисалы, автоматтык `Dispose` чакыруу үчүн
        using (StreamReader reader = new StreamReader("file.txt"))
        {
            string line = reader.ReadLine();
            Console.WriteLine(line);
        } // Мында `reader.Dispose()` автоматтык түрдө чакырылат, даже если произойдет исключение
    }

    public void ThrowExample(int value)
    {
        if (value < 0)
        {
            throw new ArgumentOutOfRangeException(nameof(value), "Мән терс болбошу керек."); // Өзгөчө чыгымды түзүү
        }
        // ... кийинки логика
    }
}