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ételeket okozhat a kód hibája vagy a hívott kód (például egy megosztott kódtár), a nem elérhető operációsrendszer-erőforrások, a futtatókörnyezet által tapasztalt váratlan feltételek (például nem ellenőrizhető kód) stb. miatt. Az alkalmazás néhány ilyen feltételből helyre tud állni, másoktól azonban nem. Bár a legtöbb alkalmazáskivételeket vissza tudja állítani, a legtöbb futásidejű kivételből nem tud helyreállni.

A .NET-ben kivételt képez az osztálytól System.Exception öröklő objektum. A rendszer kivételt jelez egy kódterületről, ahol probléma történt. A kivétel addig lesz átadva a veremnek, amíg az alkalmazás nem kezeli azt, vagy a program leáll.

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

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

  • A kivételek kiírása é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ő kód hozzáadható az alkalmazásokhoz.

A kivételek más hibaértesítési módszerekkel, például a visszatérési kódokkal szemben nyújtanak előnyöket. A hibák nem maradnak észrevétlenül, 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 hibát visszaküldött kódot.

Gyakori kivételek

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

Kivételtípus Leírás Példa
Exception Az összes kivétel alaposztálya. Nincs (használja a kivétel származtatott osztályát).
IndexOutOfRangeException A futtatókörnyezet csak akkor dobja, ha egy tömb indexelése nem megfelelő. Tömb indexelése az érvényes tartományon kívül:
arr[arr.Length+1]
NullReferenceException A futtatókörnyezet csak null értékű objektumokra hivatkozva dobja. object o = null;
o.ToString();
InvalidOperationException Metódusok dobják, ha érvénytelen állapotban van. Hívás Enumerator.MoveNext() , miután eltávolított egy elemet a mögöttes gyűjteményből.
ArgumentException Alaposztály az összes argumentumkivételeket. Nincs (használja a kivétel származtatott osztályát).
ArgumentNullException Olyan metódusok dobják, amelyek nem teszik lehetővé, hogy egy argumentum null értékű legyen. String s = null;
"Calculate".IndexOf(s);
ArgumentOutOfRangeException Az argumentumok adott tartományba való beíratása olyan metódusokkal, amelyek ellenőrzik, hogy az argumentumok egy adott tartományban vannak-e. String s = "string";
s.Substring(s.Length+1);

Lásd még