Ha metódusreferenciáról beszélünk, egy metódusra mutató pointer-re kell gondolnunk! A metódusreferencia által hivatkozott metódust dinamikusan tudjuk változtatni. Definiálása a delegate kulcsszóval történik.
Legtöbbször azért alkalmazzuk, mert több metódusra is alkalmazhatjuk, ennek jelölése a += operátor használatával valósul meg. Ha eltávolítani szeretnénk, akkor pedig a -= áll a rendelkezésünkre. Referencia típusról beszélünk.
Egy delegált objektumnak vagy egy osztály statikus függvényét , vagy egy példányfüggvényét adhatjuk értékül.
Nézzünk rövid példát! Adott egy külső osztályunk 2 metódussal. Mindkettőnek van egy paramétere, az egyik egy négyzet, míg a másik egy kétszeres szorzási eredményt ad vissza.
internal class Proba { public static int Negyzet(int i) { return i * i; } public int Dupla(int i) { return 2 * i; } }
Létrehozzuk az Emel nevű delegáltunkat, melynek egy int paramétere van , és int típusú..
A Main-ben létrehozunk egy objektumot, mely által statikus függvény lesz a delegált, aztán kiíratjuk, és adunk neki egy értéket, hogy mivel végezzen műveletet.
internal class Program { delegate int Emel(int k); private static void Main(string[] args) { Emel emel1 = new Emel(Proba.Negyzet); Console.WriteLine(emel1(3));
Gyártunk egy Proba példányt is, majd az emel2-ben meghívjuk ennek a példánynak a Dupla nevű metódust. Majd kiíratjuk és neki is adunk egy értéket.
Proba proba1 = new Proba(); Emel emel2 = new Emel(proba1.Dupla); Console.WriteLine(emel2(2)); Console.ReadLine(); } }
Szép példa 🙂
Örülök neki, hogy tetszik 🙂
Remek magyarázat! 🙂
Örülök neki! 🙂