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