WebElektronika

Saját kivétel készítése a C# nyelvben

person access_time 2018.02.05.
Az objektumorientált nyelvekben minden objektum. Így van ez a C# nyelvben is, az objektumokat pedig az osztályok segítségével adjuk meg. Véleményünk szerint az objektumorientált nyelvek két fő pillére a felülírás, illetve az öröklés. Most az öröklésre nézünk meg egy példát, elkészítünk egy saját kivételt. Ezt az öröklés segítségével valósítjuk meg, az Exception osztályból fogunk örököltetni.


Indítsuk el a Visual Studio-t és hozzunk létre egy Console alkalmazást (1. ábra).

kep
1. ábra   Projekt létrehozása
 

Másoljuk be a Program.cs file-ba a következő kódot. A névterünk két osztályt tartalmaz. A "hiba" nevű osztályt az "Exception" osztályból örököltetjük.
A "hiba" osztályban két konstruktort találunk, egy paraméternélkülit, illetve egy paraméterest. A "base" segítségével tudjuk a szülőosztály konstuktorát elérni.

namespace ConsoleException1
{
    class hiba : Exception
    {
        public hiba() : base()
        {

        }
        public hiba(string uzenet) : base(uzenet)
        {

        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            int i = 4;
            try
            {
                if (i > 3)
                    throw new hiba();
                //throw new hiba("Ez egy dobott exception");
                //throw new NotImplementedException();
            }
            catch (hiba h)
            {
                Console.WriteLine("elkaptuk");
                Console.WriteLine(h);
            }
            catch (Exception ex)
            {
                Console.WriteLine("mindent elkapunk itt");
            }
            finally
            {
                Console.WriteLine("finally");
            }
            Console.ReadLine();
        }
    }
}

 

A Main() metódusban létrehozunk egy "i" nevű, egész típusú változót, majd a try blokkban egy feltételes szerkezetben megvizsgáljuk az "i" értékét. Ha nagyobb az "i" értéke, mint  3, akkor dobunk a try blokkban egy kivételt, amelyet az egyik catch blokkban kapunk el.

Látható a feltételes szerkezet blokkjában, hogy több lehetőségünk van a kivétel eldobására. Három lehetőséget tekintünk most át. Először úgy dobjuk el a kivételt, hogy a "hiba" osztály paraméternélküli konstruktorát hívjuk meg (2. ábra). Az első sorban kiírjuk azt, hogy "elkaptuk", majd a következő sorban a "hiba" objektum tartalmát jelenítjük meg.

kep
2. ábra   Az első kivételdobás eredménye
 

Ezután próbáljuk ki a második lehetőséget, és úgy dobjuk el a kivételt, hogy a "hiba" osztály paraméteres konstruktorát hívjuk meg a példányosítás során (3. ábra). Az eldobott kivételben (amely egy "hiba" objektum) eltárolásra kerül a paraméterünk is, amely megjelenítésre is kerül. Az első sorban itt is kiírjuk az "elkaptuk" üzenetet, de a következő sorban már megjelenítjük a kivételdobáskor átadott paramétert is.

kep
3. ábra   Paraméteres kivételdobás. A paraméter megjelenítésre kerül
 

Végül, dobjuk el úgy a kivételt, hogy nem a "hiba" nevű osztályt alkalmazzuk. Figyeljük meg, hogy ekkor az a catch blokk kapja el az eldobott kivételt (4. ábra), amely minden kivételt elkap (ezért van az utolsó helyen).

kep
4. ábra   A NotImplementedException kivétel elkapása
 

A finally blokk minden kivétel elkapása után lefut.