C# – Metódusreferencia

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();
}
}

4 thoughts on “C# – Metódusreferencia

Vélemény, hozzászólás?

Adatok megadása vagy bejelentkezés valamelyik ikonnal:

WordPress.com Logo

Hozzászólhat a WordPress.com felhasználói fiók használatával. Kilépés /  Módosítás )

Google kép

Hozzászólhat a Google felhasználói fiók használatával. Kilépés /  Módosítás )

Twitter kép

Hozzászólhat a Twitter felhasználói fiók használatával. Kilépés /  Módosítás )

Facebook kép

Hozzászólhat a Facebook felhasználói fiók használatával. Kilépés /  Módosítás )

Kapcsolódás: %s