Főoldal » .NET Delegate 1. rész

.NET Delegate 1. rész

MEGOSZTÁS

Ha tetszett a cikk, akkor nyugodtan oszd meg ismerőseiddel, valószínű ők is örülni fognak neki.

A delegate-ek .NET-ben típusos metódusreferenciákat jelentenek, hasonlóak a C és C++ függvény pointereihez. Egy  delegate létrehozásával egy olyan változót definiálunk, mellyel  rámutathatunk egy olyan metódusra, amely típusa (paraméterlistája és visszatérési értéke) megfelel a delegate típusának. Meghívásával a beregisztrált metódus automatikusan meghívódik.

A delegate-ek használatának legnagyobb előnye, hogy futási időben dönthető el, hogy a több beregisztrált metódus közül melyiket hívjuk meg. 

A legtöbb esetben, híváskor pontosan megadjuk, hogy melyik metódus hívódjon meg. A következő példa egy ilyen osztályt és annak metódusát mutatja be.

public class MyClass
{
    public void Process()
    {
        Console.WriteLine(“Process() begin”);
        Console.WriteLine(“Process() end”);
    }
} 

public class Test
{
    static void Main(string[] args)
    {
        MyClass myClass = new MyClass();
        myClass.Process();
    }
}

 

A legtöbb helyeztben ez megfelelően használható. Néha azonban nem akarunk közvetlenül meghívni egy metódust – csak egyszerűen szeretnénk átadni a metódusunkat, hogy az majd valamikor valami következtében meghívódjon. Ez a lehetőség különösen hasznos esemény-vezérelt környezetben, például egy grafikus felhasználói felület használatakor, abban az esetben, ha a felhasználó megnyom egy gombot, vagy információ naplózására van szükség.

A delegate létrehozása:

 

public delegate void SimpleDelegate ()

 

Ez a sor egy olyan SimpleDelegate nevű delegate-et definiál, amivel olyan függvényekre mutathatunk rá, aminek nincs bemeneti paramétere, és void visszatérési értékkel rendelkezik.

public delegate int ButtonClickHandler (object obj1, object obj2)

Ez a sor egy olyan ButtonClickHandler nevű delegete-et ad meg, aminek van két object típusú paramétere, és int visszatérési értékkel rendelkezik.

Egy egyszerű delegate:

A következő kódrészletben egy egyszerű delegate létrehozását és annak használatát mutatom be:

 

public delegate void SimpleDelegate();
class TestDelegate
{
    public static void MyFunc()
    {
        Console.WriteLine(“I was called by delegate …”);
    } 

    public static void Main()
    {
        SimpleDelegate simpleDelegate = new SimpleDelegate(MyFunc);
        simpleDelegate();
    }
}

 

Statikus metódus meghívása: 

A következő egyszeű példa egy string paraméterrel rendelkező, void visszatérési értékű delegate-et készít. 

 

public class MyClass
{
    public delegate void LogHandler(string message);
    public void Process(LogHandler logHandler)
    {
        if (logHandler != null)
        {
            logHandler(“Process() begin”);
        }
 
        if (logHandler != null)
        {
            logHandler(“Process() end”);
        }
    }
}

 

 

public class TestApplication
{
    static void Logger(string s)
    {
        Console.WriteLine(s);
    }
 
    static void Main(string[] args)
    {
        MyClass myClass = new MyClass();
        MyClass.LogHandler myLogger = new MyClass.LogHandler(Logger);
        myClass.Process(myLogger);
    }
}

 

A delegate-et úgy kell használni, mintha a függvényt magát hívnánk meg, de előtte szükség van egy ellenőrzésre, hogy a delegate értéke egyenlő-e a null értékkel (null az értéke, ha egyetlen metódusra sem mutat).

A delegate-ben használt void Logger(string s) metódus statikus. Ennek a függvénynek a visszatérési értékben és paramétereiben is meg kell egyeznie a delegate-tel.  

Írta: Sallai Máté

Forrás

MEGOSZTÁS

Ha tetszett a cikk, akkor nyugodtan oszd meg ismerőseiddel, valószínű ők is örülni fognak neki.

HOZZÁSZÓLÁS

Ha nem hagy nyugodni az, amit a cikkben olvastál, akkor nyugodtan írd meg kérdésed vagy észrevételed kommentbe. Így szerzőnk könnyen tud neked válaszolni.