Kivételek típusai – melyiket dobjam?
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.
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.