Megosztás a következőn keresztül:


Kivételek és kivételkezelés

A C#-nyelv kivételkezelési funkciói segítenek kezelni a program futtatásakor előforduló váratlan vagy kivételes helyzeteket. A kivételkezelés a try, catch és finally kulcsszavak használatával próbálja meg azokat a műveleteket, amelyek esetleg nem sikerülnek, a hibák kezelésére, amikor ésszerűnek tartja, és az erőforrások későbbi felszabadítására. A kivételeket a közös nyelvi futtatókörnyezet (CLR), a .NET vagy a külső kódtárak, illetve az alkalmazáskód hozhatja létre. A kivételek a throw kulcsszó használatával jönnek létre.

Sok esetben előfordulhat, hogy a kivételt nem a kód által közvetlenül hívott metódus, hanem egy másik metódus okozza, amely a hívási verem mélyebb részén található. Amikor kivétel történik, a CLR felgöngyölíti a vermet, keres egy metódust, amely tartalmaz egy catch blokkot az adott kivételtípushoz, és végrehajtja az első catch blokkot, amelyet talál. Ha nem talál megfelelő catch blokkot a hívásveremben, leállítja a folyamatot, és üzenetet jelenít meg a felhasználónak.

Ebben a példában a metódus a nullával való osztást teszteli, és elkapja a hibát. A kivételkezelés nélkül ez a program a DivideByZeroException nem kezelt hibával végződne.

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($"{a} divided by {b} = {result}");
        }
        catch (DivideByZeroException)
        {
            Console.WriteLine("Attempted divide by zero.");
        }
    }
}

Kivételek áttekintése

A kivételek a következő tulajdonságokkal rendelkeznek:

  • A kivételek olyan típusok, amelyek végső soron a System.Exception-ből származnak.
  • Használjon egy blokkot try az olyan utasítások körül, amelyek kivételeket eredményezhetnek.
  • Ha a try blokkban kivétel történik, a vezérlés az első társított kivételkezelőhöz ugrik, amely a hívásverem bármely pontján jelen van. A C#-ban a catch kulcsszó egy kivételkezelő definiálására szolgál.
  • Ha nincs jelen egy adott kivétel kivételkezelője, a program hibaüzenettel leállítja a végrehajtást.
  • Ne kapjon kivételt, hacsak nem tudja kezelni, és nem hagyja ismert állapotban az alkalmazást. Ha elkapjaSystem.Exception, dobja újra a throw blokk végén a catch kulcsszóval.
  • Ha egy catch blokk egy kivételváltozót határoz meg, azzal további információt kaphat a bekövetkezett kivétel típusáról.
  • A program a kulcsszó használatával throw explicit módon hozhat létre kivételeket.
  • A kivételobjektumok részletes információkat tartalmaznak a hibáról, például a hívásverem állapotát és a hiba szöveges leírását.
  • A finally blokkban lévő kódot a rendszer akkor is végrehajtja, ha kivétel lép fel. Használjon blokkot finally az erőforrások kiadásához, például zárja be a try blokkban megnyitott streameket vagy fájlokat.
  • A .NET-ben felügyelt kivételek a Win32 strukturált kivételkezelési mechanizmusán alapulnak. További információ: Strukturált kivételkezelés (C/C++) és Gyorstalpaló a Win32 Strukturált Kivételkezelés Mélységéről.

C# nyelvi specifikáció

További információ: Kivételek a C# nyelvi specifikációjában. A nyelvi specifikáció a C#-szintaxis és -használat végleges forrása.

Lásd még