Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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
tryaz olyan utasítások körül, amelyek kivételeket eredményezhetnek. - Ha a
tryblokkban 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 acatchkulcsszó 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 elkapja
System.Exception, dobja újra athrowblokk végén acatchkulcsszóval. - Ha egy
catchblokk 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
throwexplicit 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
finallyblokkban lévő kódot a rendszer akkor is végrehajtja, ha kivétel lép fel. Használjon blokkotfinallyaz erőforrások kiadásához, például zárja be atryblokkban 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.