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.↩