Kivételek típusai – melyiket dobjam?
2009. júl. 08.
Fejlesztői hírek
A kivételkezelés alatt sok fejlesztő a catch ág megvalósítását gondolja, de ugyanolyan fontos a kivételek eldobása is. Nem szabad azzal megelégedni, hogy dobunk egy ApplicationException-t, sokkal precízebb, ha a típusos esetekben (rossz paraméter, nem jó képformátum) a beépített kivételosztályokat használjuk.
Lássuk, mik ezek:
| Kivétel osztály | Kiváltás oka |
| SystemException | Futásidejű hiba, a kivételes ősosztálya |
| AccessException | Egy típus elemeléréseinek hibája (metódus, mező, property) |
| ArgumentException | Metódushívás esetén hibás paraméter |
| ArgumentNullException | Metódushívás esetén null paraméter, ha azt a metódus nem tudja kezelni |
| ArgumentOutOfRangeException | Paraméter értéke adott határokon kívül esik |
| ArithmeticException | “Matematikai” hiba |
| ArrayTypeMismatchException | Típusos tömbön végzett művelet egy idegen típussal |
| BadImageFormatException | Rossz képformátum |
| CoreException | Futásidejű kivételes ősosztálya |
| DivideByZeroException | Nullával való osztás |
| FormatException | Argumentum formátuma nem helyes (pl: String.Format) |
| IndexOutOfRangeException | Tömb indexelése túlmutat a határokon |
| InvalidCastExpression | Futásidejű Cast művelet nem hajtható végre |
| InvalidOperationException | Nem megfelelő (idejű?) művelet hívása |
| MissingMemberException | DLL verziószám ütközés, eltérés metódushívás közben |
| NotFiniteNumberException | Nem valós szám (decimal, float; NaN, Infinity) |
| NotSupportedException | Nem létező metódus hívása (reflection?) |
| NullReferenceException | NULL értékű változó által hivatkozott objektum elérése |
| OutOfMemoryException | Memória elfogyás |
| StackOverflowException | Verem műveletek memória elfogyása (rekurízió) |
A fenti lista számos lehetőséget kínál a fejlesztőknek a megfelelő kivétel eldobásában. Ezek használata nagyban megkönnyíti a hibakezelést és hibakeresést, a metódus írója pedig publikálhatja, hogy mit várt és mit kapott.

július 12th, 2009 at 10:27
Sok fejlesztőcégnél az ApplicationException használata is csak egy álom. Talán még kivételkezelő elveik sincsenek. Főleg a Delphi-s világból átpártolt emberekre gondolok.