Sdílet prostřednictvím


Výjimky a zpracování výjimek (Příručka programování C#)

Zpracování funkce nápovědy jazyka C# výjimek řešit neočekávané nebo výjimečných situací, ke kterým dochází při spuštění programu.Používá zpracování výjimek try, catch, a finally klíčová slova, zkuste akce, které nemusí být úspěšné, zpracování chyb při rozhodování, je rozumné provést a následně vyčištění prostředků.Výjimky mohou být generovány common language runtime (CLR) rozhraní.NET Framework nebo jakékoli třetí strany knihoven nebo kódem aplikace.Výjimky jsou vytvářeny pomocí throw klíčové slovo.

V mnoha případech výjimka může být vyvolána není metodou, která má přímo volat váš kód, ale jinou metodou dále dolů v zásobníku volání.V takovém případě CLR budou unwind v zásobníku pro metodu s catch blokování pro typ výjimky a provede první takové catch bloku Pokud najde.Pokud najde žádné odpovídající catch blokovat kdekoli v zásobníku volání, bude proces ukončit a zobrazit zprávu uživateli.

V tomto příkladu je metoda zkoušky pro dělení nulou a zachytí chyby.Bez zpracování výjimek by tento program ukončen s DivideByZeroException neošetřené chyba.

class ExceptionTest
{
    static double SafeDivision(double x, double y)
    {
        if (y == 0)
            throw new System.DivideByZeroException();
        return x / y;
    }
    static void Main()
    {
        // Input for test purposes. Change the values to see
        // exception handling behavior.
        double a = 98, b = 0;
        double result = 0;

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

Přehled výjimek

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

  • Výjimky jsou typy nakonec všechny odvozené z System.Exception.

  • Použití try bloku kolem příkazy, které mohou vyvolat výjimky.

  • Jakmile dojde k výjimce v try blokovat tok řízení přejde první přidružené obslužnou rutinu, která je k dispozici kdekoli v zásobníku volání.V jazyce C# catch klíčové slovo se používá k definování obslužné rutiny výjimky.

  • Pokud je obslužná rutina vyjímky pro danou výjimku, program ukončen s chybovou zprávou.

  • Nezachytávejte výjimku, pokud jste jej zpracovat a nechte aplikaci do známého stavu.Pokud zachytit System.Exception, úloha znovu vyvolat úlohy pomocí throw klíčové slovo na konci catch bloku.

  • Pokud catch blok definuje proměnnou výjimka, ve kterém můžete získat další informace o typu výjimky, došlo k chybě.

  • Výjimky mohou být explicitně generována programem pomocí throw klíčové slovo.

  • Výjimka objekty obsahují podrobné informace o chybě, například stav zásobníku volání a text popisu chyby.

  • Kód finally blok je proveden, i když je vyvolána výjimka.Použití finally blok uvolnění prostředků, například zavřít všechny proudy nebo soubory, které byly otevřeny try bloku.

  • Spravované výjimky v rozhraní.NET Framework jsou implementovány na mechanismus zpracování výjimek strukturovaného systému Win32.Další informace naleznete v Structured Exception zpracování (C++) a A Crash kurz na hloubky z Win32 strukturované zpracování výjimek.

Související oddíly

Následující témata pro další informace o zpracování výjimek a výjimek:

Specifikace jazyka C#

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

Viz také

Referenční dokumentace

Klíčová slova jazyka C#

vyvoláním (C#-Reference)

try-catch (C#-Reference)

Zkuste finally (C#-Reference)

try-catch-finally (C#-Reference)

SystemException

Koncepty

Příručka programování C#

Hierarchie výjimek

Další zdroje

Zpracování a vyvolání výjimek

Psaní kódu spolehlivé .NET

minimálním výpisem pro specifické výjimky