C# - Absztrakt metódusok deklarálása és felhasználása

C# nyelv 15. rész

forráskód letöltése
Abban az esetben, ha biztosítani szeretnénk azt, hogy több osztály készítése esetén mindegyik leszármazott osztályban benne legyen egy, vagy akár több olyan függvény, melynek neve, paraméter listája egyezik, sőt a funkciójuk is hasonló, akkor erre legegyszerűbb megoldás az absztrakt függvények deklarálása.
Ha egy osztályban deklarálunk egy függvényt absztraktként, akkor ott semmilyen kódot nem kell hozzárendelnünk. Ebből több dolog is következik: ez az osztály szintén absztrakt kell, hogy legyen és így ebből az osztályból nem hozhatunk létre egyetlen példányt sem. Nem is lenne értelme változót létrehozni egy ilyen osztályból, hiszen ha meghívnánk annak absztrakt függvényét, akkor ez egy értelmetlen művelet lenne, mivel nem rendeltünk hozzá kódot. Így a fordító már szerkesztési időben hibát jelezne, ha ezt megpróbálnánk.
Másik fontos megjegyzendő, hogy ha egy új osztályt készítünk, mely egy absztrakt osztályból származik, akkor minden esetben felül kell írnunk az ős osztálybeli absztrakt függvényeket, ellenkező esetben szintén hibaüzenetet kapunk. Ezzel tehát biztosítható, hogy az adott függvény minden leszármazott osztályban jelen legyen.
Nézzük a gyakorlatot: készítünk egy absztrakt osztályt benne egy Function függvénnyel, mely két int típusú számot vár paraméterként és visszatérési értéke is int típusú lesz. A függvényt az abstract kulcsszó megadásával tudjuk absztraktként deklarálni. Ebben az esetben nem is rendelhetünk hozzá kódot, csak a deklarációt adhatjuk meg ebben az osztályban.
  public abstract class Compute
  {
    public abstract int Function(int a, int b);
  }
Ha készítünk egy új osztályt felhasználva az iméntit, akkor ebben felül kell írnunk a Function nevű absztrakt függvényt az override kulcsszó használatával, úgy mintha az virtuálisként lenne deklarálva. A függvény kódjában most azt valósítjuk meg, hogy összeadjuk a két paraméterként kapott számot és ezt adjuk visszatérési értékként.
  public class Add: Compute
  {
    public override int Function(int a, int b) { return a + b; }
  }
Készítünk egy másik osztályt is az előbbi absztrakt osztályból. Itt a Function függvényben a két kapott számot összeszorozzuk és ennek eredménye lesz a visszatérési érték.
  public class Mul: Compute
  {
    public override int Function(int a, int b) { return a * b; }
  }  
Előállítottunk tehát két osztályt, mellyel két számot adhatunk össze, vagy két számot szorozhatunk össze. Ebben az esetben nyilvánvaló, hogy ugyan olyan paraméter listájú függvényekre volt szükségünk, csak az elvégzendő művelet volt más.
      protected void button1_Click (object sender, System.EventArgs e)
      {
        Add a = new Add();
        Mul m = new Mul();
        listBox1.Items.Add(a.Function(10, 10).ToString());
        listBox1.Items.Add(m.Function(10, 10).ToString());
      }

C# nyelv cikksorozat