Az elöző cikkhez képest eszközöltem pár változást, így például a kód részleteket immár nem képként szúrom be hanem szövegként, szóval ha valakit zavar, hogy itt a kódrészletek csak feketén jelennek meg akkor annak ajánlom, a "liveos"tárhelyemen elolvasni a cikket.
Legutóbb ott hagytuk abba, hogy szeretnénk egy olyan opcionális paraméternek értéket adni, amit megelőz több másik paraméter is. Ez esetben tehetjük azt, hogy minden előtte álló paraméternek értékül adjuk az alapértelmezett értékét újra, vagy használhatjuk az ún. nevesített paramétereket.
Szintakszis
A nevesített paraméterek használata ugyan olyan egyszerű, mint az opcionális paramétereké, csak amíg utóbbiakat a függvény deklarálásánál használjuk, utóbbiaknak a függvény meghívásakor van szerepük. Nézzük a már jól ismert SayHello() függvényünket:
public static void SayHello(string a = "Hello", string b = "World", string c = "!")
{
Console.WriteLine("{0} {1}{2}", a,b,c);
}
Van 3 db bemenő opcionális paramétere és mi csak az utolsónak szeretnénk, az alapértelmezettől eltérő értéket adni. A dolog a következőképpen fest:
static void Main(string[] args)
{
SayHello(c:"?");
}
A kimenet a következő lesz:
Hello World?
A szintakszis pofon egyszerű, nem kell mást tennünk, mint a kívánt paraméter neve után kettősponttal elválasztva megadni a kívánt értéket. Persze nem csak opcionális paramétereknél használhatjuk ezt a funkciót:
public static int Add(int x, int y)
{
return x + y;
}
static void Main(string[] args)
{
Console.WriteLine(Add(y: 3, x: 2));
}
Eredmény:
5
Bevallom a fenti példa elégé értelmetlen, viszont hasznos tud lenni a dolog abban az esetben, ha a paramétereknek nem a paraméterlistába elfoglalt helyük szerint szeretnénk értéket adni (Ez igen hasznos tud lenni egy hosszabb paraméterlista esetén.).
Egy apró megjegyzés
Ezek után alighanem nyilvánvaló, hogy mire kell odafigyelni ha nevesített paramétereket használunk. Amennyiben a függvény deklarációban átnevezzük az egyik paramétert, akkor hibát fogunk kapni. A SayHello() függvényben nevezzük át a c paramétert d-re:
public static void SayHello(string a = "Hello", string b = "World", string d = "!")
De a függvény meghívásánál továbbra is c szerepel, mint a változó neve, így a következő hibát fogjuk kapni, ha megpróbáljuk lefordítani:
Figyeljünk oda, hogy olyan paramétert amit "nevesítve" is használunk lehetőleg már ne nevezünk a későbbiekben.
Konklúzió
A nevesített paraméterek egy újabb olyan funkció mely kényelmesebbé teheti a C# programozók életét, de biztosra kell mennünk, hogy nem nevezzük át a paramétereinket mert esetleg később gondjaik lehetnek mindazoknak akik a függvényeinket használják.
Linkek:
B#.NET Blog C# 4.0 Feature Focus - Part 2 - Named parameters
A példa project
------------------------------------------------------------
Legközelebb megnézzük a C# 4.0 leginkább megosztó újítását a dinamikus típusokat. De még előtte felkerül még egy héten egy komolyabb interopos demo ami az opcionális és nevesített paraméterek használatát mutatja be.





