Metody
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