Sobes.tech
Intern

Kas ir izņēmumi C# programmēšanas valodā?

sobes.tech AI

Atbilde no AI

C# izņēmumi ir patoloģiskas situācijas vai kļūdas, kas rodas programmas izpildes laikā un traucē tās normālo plūsmu.

Tie ļauj atdalīt kļūdu apstrādes kodu no galvenā programmas loģikas koda un nodrošina strukturētāku pieeju kļūdu pārvaldībai.

Galvenie C# izņēmumu aspekti:

  1. Tipi: C# ir standarta izņēmumu klases hierarhija, kas mantojas no pamatklases System.Exception. Piemēram, System.NullReferenceException, System.DivideByZeroException, System.IO.FileNotFoundException. Ir arī iespējams izveidot savas izņēmumu klases.
  2. Izņēmuma ģenerēšana (throw): Izņēmums tiek ģenerēts ar atslēgvārdu throw.
  3. Izņēmumu apstrāde (try-catch): try blokā ir kods, kas var radīt izņēmumu. catch blokā tiek noķerts konkrēts izņēmuma tips un izpildīts tā apstrādes kods.
  4. Beigu bloks (finally): finally bloks vienmēr tiek izpildīts, neatkarīgi no tā, vai ir noticis izņēmums vai nē. To bieži izmanto resursu atbrīvošanai.
  5. using operators: Ērtāks veids resursu pārvaldībai, kas garantē Dispose metodes izsaukšanu. Tas ir līdzīgs try-finally konstrukcijai objektiem, kas īsteno IDisposable interfeisu.
  6. Izņēmumu filtri: ļauj pievienot nosacījumu catch blokam, lai specifiskāk apstrādātu izņēmumus.

Piemērs lietošanai:

public class Example
{
    public void ProcessData(int denominator)
    {
        try
        {
            int result = 10 / denominator; // Var radīt `DivideByZeroException`
            Console.WriteLine($"Rezultāts: {result}");
        }
        catch (DivideByZeroException ex) // Noķer konkrētu izņēmumu
        {
            Console.WriteLine("Kļūda: nevar dalīt ar nulli.");
            // Izņēmuma reģistrēšana, ja nepieciešams
            // Console.WriteLine($"Izņēmuma detaļas: {ex.Message}");
        }
        catch (Exception ex) // Noķer jebkuru citu izņēmumu
        {
            Console.WriteLine($"Neparedzēta kļūda: {ex.Message}");
        }
        finally // Šis bloks vienmēr tiks izpildīts
        {
            Console.WriteLine("Apstrāde pabeigta.");
        }
    }

    public void UsingExample()
    {
        // Piemērs, izmantojot `using` automātiskai `Dispose` izsaukšanai
        using (StreamReader reader = new StreamReader("file.txt"))
        {
            string line = reader.ReadLine();
            Console.WriteLine(line);
        } // Šeit `reader.Dispose()` tiek automātiski izsaukts, pat ja notiek izņēmums
    }

    public void ThrowExample(int value)
    {
        if (value < 0)
        {
            throw new ArgumentOutOfRangeException(nameof(value), "Vērtībai jābūt nenegatīvai."); // Sava izņēmuma ģenerēšana
        }
        // ... turpmākā loģika
    }
}