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
a kulcsszavak használatával olyan műveleteket próbál ki, amelyek nem feltétlenül sikeresek, kezeli a hibákat, amikor úgy dönt, hogy ezt ésszerűnek ítéli, és ezt követően törli az erőforrásokat. A kivételeket a közös nyelvi futtatókörnyezet (CLR), a .NET- vagy külső kódtárak, illetve az alkalmazáskód generálhatja. A kivételek a throw
kulcsszó használatával jönnek létre.
Sok esetben előfordulhat, hogy egy kivételt nem a kód által közvetlenül meghívott metódus, hanem egy másik metódus jelez a hívási veremben. Kivétel esetén a CLR feloldja a vermet, és egy metódust keres az adott kivételtípus blokkjával catch
, és végrehajtja az első ilyen catch
blokkot. 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 egy metódustesztet végzünk a nullával való osztáshoz, és elkapjuk a hibát. A kivételkezelés nélkül ez a program a DivideByZeroException nem kezelt hibával leállna.
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.");
}
}
}
Kivételek áttekintése
A kivételek a következő tulajdonságokkal rendelkeznek:
- A kivételek olyan típusok, amelyekből végül az összes származik
System.Exception
. - Használjon blokkot
try
az olyan utasítások körül, amelyek kivételeket jelezhetnek. - Ha kivétel történik a
try
blokkban, a vezérlés folyamata az első társított kivételkezelőre ugrik, amely a hívási veremben bárhol jelen van. A C# nyelvben acatch
kulcsszó egy kivételkezelő definiálására szolgál. - Ha egy adott kivételhez nem tartozik kivételkezelő, a program hibaüzenettel leáll.
- Ne észlelje a kivételt, hacsak nem tudja kezelni, és nem hagyja ismert állapotban az alkalmazást. Ha elkapja
System.Exception
, a blokk végéncatch
található kulcsszóvalthrow
próbálkozzon újra. - Ha egy
catch
blokk kivételváltozót határoz meg, a használatával további információkat kaphat a bekövetkezett kivétel típusáról. - A kivételeket a program explicit módon generálhatja a
throw
kulcsszó használatával. - A kivételobjektumok részletes információkat tartalmaznak a hibáról, például a hívássorozat állapotát és a hiba szöveges leírását.
- A blokkokban lévő
finally
kód végrehajtása attól függetlenül történik, hogy kivétel történik-e. Blokk használatávalfinally
szabadíthat fel erőforrásokat, például bezárhatja a blokkbantry
megnyitott streameket vagy fájlokat. - A .NET-ben a 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 összeomlási kurzus a Win32 strukturált kivételkezelés mélységéről.
C# nyelvspecifikáció
További információ: Kivételek a C# nyelv specifikációjában. A nyelvi specifikáció a C#-szintaxis és -használat végleges forrása.
Lásd még
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: