Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

P ROGRAMOZÁS C# - BAN Kivételkezelés. P ÉLDA I. Nullával való osztás miatt kapjuk a hibaüzenetet.

Hasonló előadás


Az előadások a következő témára: "P ROGRAMOZÁS C# - BAN Kivételkezelés. P ÉLDA I. Nullával való osztás miatt kapjuk a hibaüzenetet."— Előadás másolata:

1 P ROGRAMOZÁS C# - BAN Kivételkezelés

2 P ÉLDA I. Nullával való osztás miatt kapjuk a hibaüzenetet.

3 P ÉLDA II. A hibaüzenetet azért kapjuk mert a felhasználói bevitelnél nem egész számot adtunk meg!

4 K IVÉTELEK A kivétel egy jelzés, amelyet akkor indít útra egy függvény, ha nem valamilyen oknál fogva nem tudja végrehajtani a rábízott feladatot Pl: nullával való osztás A hiba jelzés után azonnal visszatér a hívás helyére, azaz automatikusan végrehajtódik a return parancs

5 K IVÉTELEK Ha a kivételt a hívás helyén nem kezeljük, akkor ezen függvény is visszatér a hívó pontra és így tovább… Ha a kivétel a Main() függvényben keletkezik, akkor a hibát az operációs rendszer ”fogja el”, amire saját hibaüzenettel válaszol  ekkor gyakran leáll programunk futása.

6 K IVÉTEL DOBÁSA Kivétel keletkezésének két lehetősége van: Egyik lehetőség amikor a keretrendszer generálja hibát, amelyet ha nem kapunk el, akkor az operációs rendszertől kapjuk a hibaüzenetet Másik lehetőség, hogy mi is tudunk kivételt dobni, amennyiben valamilyen hibalehetőséget találunk programunk logikájában

7 K IVÉTEL KEZELÉS ( EXCEPTION HANDLING ) A kivétel kezeléséhez 4 új utasítást vezetünk be: try : ezt követő blokkot nevezzük védett blokknak, itt keletkezhet a hiba catch : ezzel az utasítással kaphatjuk el a védett blokk után a hibát throw : saját kivétel dobása, kivétel továbbadása finally : végzáradék, a védett blokk végén biztosan végrehajtódik

8 K IVÉTELKEZELÉS FORMÁTUMA try { Védett blokk, azon utasítások amelyek hibát okozhatnak. } catch (Exception e) { Itt történik a hiba fajtájától függő hiba kezelése. Olyan hibát kezelünk le, amilyet a catch után elkaptunk. } finally { Ezen utasítások mindenképp végrehajtódnak. }

9 K IVÉTELKEZELÉS try { … } catch (Exception e ) { … } try { … } catch (Exception e ) { … } Az a programszakasz, amelyik kivételt dobhat Itt specifikáljuk, milyen típusú kivételeket kívánunk elkapni Itt dolgozzuk fel a kivételt ( mit kell csinálni, ha kivétel történt ) Ezen a néven hivatkozhatunk a feldobott példányra a kivételt feldogozó kódban (változó-deklaráció)

10 A catch után elkapunk egy hibát, amely az Exception osztály vagy annak leszármazottja lehet. Ezt egy e nevű objektummal azonosítjuk. Itt egy általános hibát kapunk, amelyet természetesen speciálisan is meg lehet adni (erről bővebben az MSDN-ben)

11 P ÉLDA I. try { Console.WriteLine("Kérek egy egész számot: "); int a = Int32.Parse(Console.ReadLine()); } catch (Exception e) { Console.WriteLine(e.Message); } finally { Console.WriteLine("Vége"); } Itt keletkezhet a hiba Ha van hiba itt kapjuk el! Ezzel kiíratjuk az elkapott hiba üzenetét! Ez a blokk mindenképp lefut!

12 N ÉHÁNY SPECIÁLIS HIBAÜZENET System.ArithmeticException System.FormatException System.DivideByZeroException System.IndexOutOfRangeException Amennyiben ilyen speciális hiba előfordulására számítunk, úgy a catch után őt kapjuk el először és csak később az általános hibaosztályt.

13 P ÉLDA II. try { int x = 20; int y = 0; int h = x / y; } catch (DivideByZeroException hiba) { Console.WriteLine(hiba.Message); } finally { Console.WriteLine("Vége"); }

14 K IVÉTELEK Látható, hogy az előző példában már speciális hibát fogtunk meg (DivideByZeroException) Ki is írattuk, hogy hiba van, de ha még előfordulhat más hiba is a védett blokkban, akkor további catch blokkok alkalmazásával elkaphatjuk azokat is. Ügyeljünk arra, hogy ezen speciális hibák felépítése hierarchikus,először a speciális hibákat kapjuk el, majd később jöhetnek az általánosabb hibák, majd legvégül az ősosztály az Exception elkapása. A Base Class Library metódusaihoz a help-ben le van írva, hogy milyen típusú kivételt dobnak…

15 K IVÉTEL DOBÁSA try { int x = 20; int y = 0; if (y == 0) { throw new DivideByZeroException("Nullával nem lehet osztani!!!"); } else { int h = x / y; } catch (DivideByZeroException hiba) { Console.WriteLine(hiba.Message); }

16 KIVÉTEL DOBÁSA Látható, miután megvizsgáltuk az osztó értékét és rájöttünk, hogy nulla, mi magunk indítottunk útnak egy kivételt ”Nullával nem lehet osztani!” üzenettel. Ezt elkapva az üzenetét kiíratva már a mi saját hibaüzenetünket láthatjuk a képernyőn Természetesen létrehozható saját kivétel osztály az Exception-ből származtatva, ezekről bővebben az MSDN-ben olvashatunk.

17 F ELADATOK Ezen leckéhez nem tartoznak feladatok, de Gyakorlásképpen néhány eddig feladatban, amelyben egész vagy valós számot kérünk be, kezeljük le, hogy ne írhassanak be stringet a felhasználók Ugyanígy az eddig megírt programjainkban kezeljük a nullával való osztás problémáját


Letölteni ppt "P ROGRAMOZÁS C# - BAN Kivételkezelés. P ÉLDA I. Nullával való osztás miatt kapjuk a hibaüzenetet."

Hasonló előadás


Google Hirdetések