7. Předání parametru

7.6. Volitelné parametry

Přetížení metod není nic specifického pro C#. Tento princip využívají i jiné objektově orientované jazyky. Klíčovým pro jazyk C# je spolupráce s jinými aplikacemi a komponentami jiných jazyků navržených pro prostředí .NET. Jednou z hlavních technologií používanou operačním systémem Windows je objektový model komponent COM (zkratka anglického „Component Object Model“). Bohužel COM nepodporuje přetížení metod, ale místo nich používá metody, které umí přijímat volitelné parametry. [6]

Volitelné parametry poskytují řešení, když kompilátor nedokáže od sebe nelze dostatečně odlišit datové typy předávaných parametrů. [6]

Představme si, že máme metodu, která přijímá dva celočíselné parametry s názvem parametr1 a parametr3 a jeden reálný parametr2. První metoda ukazuje, že kompilátor nemá problém rozlišit první (dva celočíselné parametry a jeden reálný), druhou (celočíselný parametr a reálný parametr) a třetí verzi přetížené metody (jeden celočíselný parametr). Problém nastává u čtvrté metody. Třetí metodě jsme totiž předávali parametr1 a ve čtvrté parametr3. V tuto chvíli kompilátor kód nezkompiluje, protože třetí a čtvrtou metodu od sebe nedokáže odlišit – viz Kód 1. 

//Deklarace přetížené metody (stejný název) -> O.K.
public void ZpracujData(int parametr1, double parametr2, int parametr3)
{
    //...
}
 
//Deklarace přetížené metody (stejný název) -> O.K.
public void ZpracujData(int parametr1, double parametr2)
{
    //...
}
 
//Deklarace přetížené metody (stejný název) -> O.K.
public void ZpracujData(int parametr1)
{
    //...
}
 
//Deklarace přetížené metody (stejný název) -> K.O.
public void ZpracujData(int parametr3)
{
    //...
}

Kód 1: Příklad přetížené metody a možný problém s odlišením metod

U takového případu lze při deklaraci metody použit tzv. volitelný parametr. První metodu můžeme nahradit metodou, které bude jedno, zda jí předáme jeden, dva nebo tři parametry. K parametru přidáme výchozí hodnotu pomocí operátoru přiřazení. První parametr bude povinný (neuvádí výchozí hodnotu) a ostatní mohou a nemusí být zadány – viz Kód 2. Pokud druhý a třetí parametr nebudou zadány, na začátku metody jim bude přiřazena počáteční hodnota.

//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 metody s volitelnými parametry

Metodu tedy můžeme volat různými způsoby – viz Kód 3.

//Volání metody pouze s jedním parametrem
ZpracujData(0);
//Volání metody pouze se dvěma parametry
ZpracujData(0, 1.0);
//Volání metody pouze se třemi parametry
ZpracujData(0, 1.0, 2);

Kód 3: Příklad volání metody s volitelnými parametry