Sobes.tech
Intern

Čo sú výnimky v jazyku C#?

sobes.tech AI

Odpoveď od AI

Výnimky v jazyku C# sú abnormálne situácie alebo chyby, ktoré vznikajú počas behu programu a narušujú jeho normálny tok.

Umožňujú oddeliť kód spracovania chýb od hlavného logického kódu aplikácie a poskytujú štruktúrovanejší prístup k riadeniu chýb.

Hlavné aspekty výnimiek v C#:

  1. Typy výnimiek: C# má hierarchiu štandardných tried výnimiek, ktoré dedičia od základnej triedy System.Exception. Napríklad System.NullReferenceException, System.DivideByZeroException, System.IO.FileNotFoundException. Je možné vytvárať aj vlastné triedy výnimiek.
  2. Generovanie výnimiek (throw): Výnimka sa generuje pomocou kľúčového slova throw.
  3. Spracovanie výnimiek (try-catch): Blok try obsahuje kód, ktorý môže generovať výnimku. Blok catch zachytí špecifický typ výnimky a vykoná kód pre jej spracovanie.
  4. Záverečný blok (finally): Blok finally sa vždy vykoná, bez ohľadu na to, či došlo k výnimke alebo nie. Často sa používa na uvoľnenie zdrojov.
  5. Operátor using: Pohodlnejší spôsob správy zdrojov, ktorý garantuje volanie metódy Dispose. Je analogický k štruktúre try-finally pre objekty implementujúce rozhranie IDisposable.
  6. Filtre výnimiek: Umožňujú pridať podmienku k bloku catch pre špecifickejšie spracovanie výnimiek.

Príklad použitia:

public class Example
{
    public void ProcessData(int denominator)
    {
        try
        {
            int result = 10 / denominator; // Môže generovať DivideByZeroException
            Console.WriteLine($"Výsledok: {result}");
        }
        catch (DivideByZeroException ex) // Zachytáva konkrétne výnimky
        {
            Console.WriteLine("Chyba: nemožno deliť nulou.");
            // Logovanie výnimky, ak je potrebné
            // Console.WriteLine($"Detaily výnimky: {ex.Message}");
        }
        catch (Exception ex) // Zachytáva akúkoľvek inú výnimku
        {
            Console.WriteLine($"Nastala neočakávaná chyba: {ex.Message}");
        }
        finally // Tento blok sa vždy vykoná
        {
            Console.WriteLine("Spracovanie dokončené.");
        }
    }

    public void UsingExample()
    {
        // Príklad použitia `using` na automatické volanie Dispose
        using (StreamReader reader = new StreamReader("file.txt"))
        {
            string line = reader.ReadLine();
            Console.WriteLine(line);
        } // Tu sa volanie reader.Dispose() vykoná automaticky, aj keď dôjde k výnimke
    }

    public void ThrowExample(int value)
    {
        if (value < 0)
        {
            throw new ArgumentOutOfRangeException(nameof(value), "Hodnota musí byť nezáporná."); // Generovanie vlastnej výnimky
        }
        // ... ďalšia logika
    }
}