A delegate-ek esetén is lehetőségünk van generikus programozásra. A .NET keretrendszer harmadik változatában definiáltak számos generikus delegált típust, amire jó pár dolog épül a keretrendszerben.
Éppen ezért érdemes saját kódunkban is alkalmaznunk őket. Ezek a generikus delegáltak öt csoportra oszthatóak a visszatérési érték és funkció szerint. Ezek:
Action
Az Action típusú delegáltak visszatérési értéke void. Paraméterek tekintetében 1-16 paraméteres változatok definiáltak. Itt érdemes megjegyezni, hogy programozástechnikai szempontból, ha egy metódusnak 4 vagy több paramétere van, akkor érdemes azokat objektumba csomagolni.
public delegate void Action();
public delegate void Action<in T1,in T2>(T1 arg1, T2 arg2);
public delegate void Action<in T1,in T2,in T3>(T1 arg1, T2 arg2, T3 arg3);
Néhány példa az Action delegate-nek megfelelő metódus szignatúrákra:
void Pelda1() { }
void Pelda2(int parameter1, int parameter2) { }
void Pelda3(int parameter1, int parameter2, int parameter3) { }
Func
Ez a legáltalánosabb delegate típus. Itt nincs explicit típus kikötve. A visszatérési érték minden esetben az utolsónak megadott típus lesz. Itt is 1-16 paraméteres változatok definiáltak.
public delegate TResult Func<out TResult>();
public delegate TResult Func<in T, out TResult>(T arg);
public delegate TResult Func<in T1, in T2, out TResult>(T1 arg1, T2 arg2);
public delegate TResult Func<in T1, in T2, in T3, out TResult>(T1 arg1, T2 arg2, T3 arg3);
Néhány példa a Func delegate-nek megfelelő metódus szignatúrákra:
bool Pelda1()
{
return false;
}
int Pelda2()
{
return 42;
}
double Pelda3(int szam)
{
return 0.75 * szam;
}
Predicate
Ezen típusú delegált visszatérési értéke bool. Leginkább predikátumok1 definiálására használt, ami a gyakorlatban azt jelenti, hogy egy objektum egy, vagy több tulajdonsága alapján meghatározunk egy logikai értéket.
public delegate bool Predicate<in T>(T obj);
Egy példa a Predicate delegate-nek megfelelő metódus szignatúrára:
bool Pelda1(int szam)
{
return szam == 42;
}
Comparison
Ennek a delegate-nek két bemenete van és összehasonlítást végez a két elem között.
public delegate int Comparison<in T>(T x, T y);
Ha a visszatérési értéke 0, akkor x és y egyenlőek. Ha a visszaadott szám negatív, akkor x < y, ha pedig pozitív az érték, akkor y > x.
Egy példa a Comparison delegate-nek megfelelő metódus szignatúrára:
int Pelda(int be1, int be2)
{
if (be1 > be2)
{
return 1;
}
else if (be1 < be2)
{
return -1;
}
else
{
return 0;
}
}
Converter
Típus konverziót leíró delegate típus.
public delegate TOutput Converter<in TInput, out TOutput>(TInput input);
Egy példa a Converter delegate-nek megfelelő metódus szignatúrára:
int Pelda(double bemenet)
{
return (int)bemenet;
}
-
Predikátumnak nevezzük az olyan kijelentő mondatot, amely egy, vagy több változótól függ, és amely ezen változók minden megengedett rögzített értékeire egy kijelentést ad.↩
2026.03.11. @ 10:35
A „Ha a visszaadott szám negatív, akkor x x” mondatban, ugyanaz a feltétel van leírva, csak fordítva. Szerintem úgy helyesebb lenne, ha a másodiknál ez lenne írva: x > y