Metody
7. Předání parametru
7.7. Pojmenování argumentů
Při volání metody jsme standardně předávali hodnoty (skutečných
parametrů) do metody v takém pořadí, jak jsou deklarovány v metodě (formální
parametry). Jazyk C# umožňuje při volání metody pojmenovat jednotlivé parametry,
tudíž není zapotřebí předávat je přesně v pořadí, jak jsou deklarovány v metodě
– viz Kód 1.
Metody deklarované v předchozí kapitole (viz Kód 2) lze volat pouze např. se dvěma pojmenovanými
parametry.
//Volání metody s pojmenovanými parametry ZpracujData(parametr3: 2, parametr2: 1.0, parametr1: 0); //Volání metody jen se dvěma pojmenovanými parametry ZpracujData(parametr3: 2, parametr1: 0);
Kód 1: Příklad volání metody ZpracujData s pojmenovanými
parametry
//Deklarace metody(stejný název) s volitelnými parametry public void ZpracujData(int parametr1, double parametr2 = 0.0, int parametr3 = 1) { //... }
Kód 2: Příklad deklarace metody ZpracujData s volitelnými parametry
Měli bychom také upozornit na možné problémy, které mohou
nastat s volitelnými parametry. Máme deklarovány dvě metody
s volitelnými parametry – viz Kód 3.
Problém nejednoznačnosti výběru metody by mohl nastat až při jejich volání.
//Deklarace metody (stejný název) s volitelnými parametry public void ZpracujData(int parametr1, double parametr2 = 0.0, string parametr3 = "Text") { //... } //Deklarace metody (stejný název) s volitelnými parametry public void ZpracujData(int parametr1, double parametr2 = 0.0, string parametr3 = "Text", int parametr4 = 0) { //... }
Kód 3: Příklad metody ZpracujData s volitelnými parametry
Podívejme se nyní na případ volání deklarovaných metod - viz Kód 4. V případě prvního volání metody ZpracujData kompilátor zajistí volání
metody, která se nejvíce shoduje s deklarovanými metodami. Spustí tedy
metodu se třemi parametry. Druhému volání metody zase nejvíce vyhovuje metoda se
čtyřmi parametry. Problém nastane při třetím volání metody. Kompilátor neví, kterou metodu
spustit. Obě verze metody totiž vyhovují volání, protože mají volitelné
parametry pro druhý, třetí i čtvrtý parametr. Volá se tedy verze metody se
třemi parametry s tím, že se pro parametr3
použije výchozí hodnota, nebo se volá metoda se čtyřmi parametry s tím, že
se výchozí hodnota použije u parametrů parametr3
a parametr4? Kompilátor díky této
nejednoznačnosti tento kód nezkompiluje.
//Volání metody - parametry lze rozpoznat -> O.K. ZpracujData(1, 0.5, "Nazdar"); //Volání metody - parametry lze rozpoznat -> O.K. ZpracujData(1, parametr4: 10); //Volání metody - parametry nelze rozpoznat -> K.O. ZpracujData(1, 2.5);
Kód 4: Příklad nejednoznačnosti při volání metody ZpracujData s volitelnými pojmenovanými parametry