Megosztás:


Kivételek kezelése és kivetése a .NET-ben

Az alkalmazásoknak képesnek kell lenniük a végrehajtás során felmerülő hibák konzisztens kezelésére. A .NET egységesen értesíti az alkalmazásokat a hibákról: a .NET-műveletek kivételekkel jelzik a hibát.

Kivételek

Kivételt képeznek azok a hibaállapotok vagy váratlan viselkedések, amelyeket egy végrehajtó program tapasztal. Kivételek keletkezhetnek a kódjában található hibák vagy a hívott kódban (például egy megosztott könyvtárban), a nem elérhető operációs rendszer erőforrásai, a futási környezet által tapasztalt váratlan feltételek (például nem ellenőrizhető kód) miatt, és így tovább. Az alkalmazás egyes feltételekből képes helyreállni, másokból azonban nem. Bár a legtöbb alkalmazáskivüldetésből helyreállhat, a legtöbb futtatókörnyezeti kivételből nem tud helyreállni.

A .NET-ben egy olyan kivételről van szó, amely egy objektum, ami az System.Exception osztálytól örököl. A rendszer kivételt jelez a kód egy olyan területéről, ahol probléma lépett fel. A kivétel továbbítódik a veremben, amíg az alkalmazás nem kezeli, vagy a program megszűnik.

Kivételek és hagyományos hibakezelési módszerek

A nyelv hibakezelési modellje hagyományosan a nyelv egyedi módszerére támaszkodott a hibák észlelésére és a hozzájuk tartozó kezelők felderítésére, vagy az operációs rendszer által biztosított hibakezelési mechanizmusra. A .NET a kivételkezelés megvalósításának módja a következő előnyöket nyújtja:

  • A kivételek kivetése és kezelése ugyanúgy működik a .NET-programozási nyelvek esetében.

  • A kivételek kezeléséhez nincs szükség adott nyelvszintaxisra, de lehetővé teszi, hogy minden nyelv saját szintaxist definiáljon.

  • A kivételek a folyamat és a géphatárok között is előfordulhatnak.

  • A program megbízhatóságának növelése érdekében a kivételkezelési kód hozzáadható egy alkalmazáshoz.

A kivételek előnyt nyújtanak más hibaértesítési módszerekkel, például a visszatérési kódokkal szemben. A hibák nem lesznek észrevétlenek, mert ha kivételt jeleznek, és nem kezelik azt, a futtatókörnyezet leállítja az alkalmazást. Az érvénytelen értékek nem propagálnak tovább a rendszeren, mert a kód nem tudja ellenőrizni a hiba visszatérési kódját.

Gyakori kivételek

Az alábbi táblázat felsorol néhány gyakori kivételt, példákkal arra, hogy mi okozhatja őket.

Kivétel típusa Leírás példa
Exception Alaposztály az összes kivételhez. Nincs (használja a kivétel származtatott osztályát).
IndexOutOfRangeException A futtatókörnyezet csak akkor dobja el, ha egy tömb indexelése helytelen. Tömb indexelése az érvényes tartományon kívül:
arr[arr.Length+1]
NullReferenceException A futtatókörnyezet csak null objektumra hivatkozva dobja ki. object o = null;
o.ToString();
InvalidOperationException Metódusok szerint dobva, ha érvénytelen állapotban van. A Enumerator.MoveNext() hívása, miután eltávolított egy elemet az alapul szolgáló gyűjteményből.
ArgumentException Az összes argumentum kivételének alaposztálya. Nincs (használja a kivétel származtatott osztályát).
ArgumentNullException Olyan metódusok által dobva, amelyek nem teszik lehetővé, hogy az argumentum null legyen. String s = null;
"Calculate".IndexOf(s);
ArgumentOutOfRangeException Olyan metódusokkal dobva, amelyek ellenőrzik, hogy az argumentumok egy adott tartományban vannak-e. String s = "string";
s.Substring(s.Length+1);

Lásd még