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
- Kivételosztály és tulajdonságok
- Útmutató: A kivételeket a Try-Catch blokk használatával
- Útmutató: Adott kivételek használata fogási blokkokban
- Útmutató: Explicit módon dobja ki a kivételeket
- Útmutató: User-Defined kivételek létrehozása
- User-Filtered kivételkezelők használata
- Útmutató: Végül blokkok használata
- COM-együttműködési kivételek kezelése
- Ajánlott eljárások kivételekhez
- Amit minden devnek tudnia kell a futtatókörnyezet kivételeiről