Výjimky a jejich zpracování

Funkce zpracování výjimek jazyka C# vám pomohou vypořádat se s neočekávanými nebo výjimečnými situacemi, ke kterým dochází při spuštění programu. Zpracování výjimek používá klíčová slova , a k pokusům o akce, které nemusí být úspěšné, ke zpracování selhání, když se rozhodnete, že je rozumné to udělat, a následně vyčistit try catch finally prostředky. Výjimky může generovat modul CLR (Common Language Runtime), knihovny .NET nebo knihovny třetích stran nebo kód aplikace. Výjimky se vytvářejí pomocí klíčového throw slova .

V mnoha případech může být výjimka vyvolána nikoli metodou, kterou váš kód volal přímo, ale další metodou dále v zásobníku volání. Při vyvolání výjimky modul CLR odvíjí zásobník, hledá metodu s blokem pro konkrétní typ výjimky a spustí první takový blok, který catch catch najde. Pokud nenajde žádný vhodný blok kdekoli v zásobníku volání, ukončí proces a zobrazí catch uživateli zprávu.

V tomto příkladu metoda testuje dělení nulou a zachycuje chybu. Bez zpracování výjimek by se tento program ukončil s výjimkou DivideByZeroException byla neošetřená chyba.

public class ExceptionTest
{
    static double SafeDivision(double x, double y)
    {
        if (y == 0)
            throw new DivideByZeroException();
        return x / y;
    }

    public static void Main()
    {
        // Input for test purposes. Change the values to see
        // exception handling behavior.
        double a = 98, b = 0;
        double result;

        try
        {
            result = SafeDivision(a, b);
            Console.WriteLine("{0} divided by {1} = {2}", a, b, result);
        }
        catch (DivideByZeroException)
        {
            Console.WriteLine("Attempted divide by zero.");
        }
    }
}

Přehled výjimek

Výjimky mají následující vlastnosti:

  • Výjimky jsou typy, které nakonec pocházejí z System.Exception .
  • Kolem try příkazů, které mohou vyvolat výjimky, použijte blok.
  • Jakmile v bloku dojde k výjimce, tok řízení přejde na první přidruženou obslužnou rutinu výjimky, která je kdekoli v try zásobníku volání. V jazyce C# catch se klíčové slovo používá k definování obslužné rutiny výjimky.
  • Pokud pro danou výjimku není k dispozici žádná obslužná rutina výjimky, program se zastaví s chybovou zprávou.
  • Výjimku nezachyťte, pokud ji nemůžete zpracovat a ponechat aplikaci ve známém stavu. Pokud System.Exception zachytíte , znovu ji zobecníte pomocí klíčového slova throw na konci catch bloku.
  • Pokud blok definuje proměnnou výjimky, můžete ji použít k získání dalších informací o typu catch výjimky, ke které došlo.
  • Výjimky mohou být explicitně generovány programem pomocí klíčového throw slova .
  • Objekty výjimek obsahují podrobné informace o chybě, například stav zásobníku volání a textový popis chyby.
  • Kód v finally bloku je proveden bez ohledu na to, zda je vyvolána výjimka. Blok můžete použít k uvolnění prostředků, například k zavření datových proudů nebo souborů, které byly v bloku finally try otevřeny.
  • Spravované výjimky v rozhraní .NET jsou implementovány nad mechanismus strukturovaného zpracování výjimek Win32. Další informace najdete v tématu Strukturované zpracování výjimek (C/C++) a Crash Course o hloubkách strukturovaného zpracování výjimek Win32.

Specifikace jazyka C#

Další informace najdete v tématu Výjimky ve specifikaci jazyka C#. Specifikace jazyka je úplným a rozhodujícím zdrojem pro syntaxi a použití jazyka C#.

Viz také