TOC

This article has been localized into Czech by the community.

Základy:

Parametry funkcí

V předchozí kapitole jsme se podívali na funkce. Stručně jsme probrali parametry, ale jen stručně. Zatímco parametry jsou velmi jednoduché a přímočaré použití, existují triky, které je mohou udělat mnohem výkonnější.

První věcí, na kterou se podíváme, jsou výstupní a odkazové modifikátory. C#, ale taktéž i další jazyky, se odlišují mezi 2 parametry: "hodnotou" a "odkazem". V C# je výchozí předávání "hodnotou", což v základu znamená, když předáváte proměnnou do volání funkce, tak ve skutečnosti posíláte kopii objektu, namísto odkazu. To také znamená, že můžete měnit parametr zevnitř funkce bez zásahu do původního objektu, který jste předal jako parametr.

Pomocí klíčového slova ref a out, můžeme toto chování změnit, a proto předáváme odkaz na objekt namísto jeho hodnoty.

Modifikátor ref

Promyslete následující příklad:

static void Main(string[] args)
{
    int number = 20;
    AddFive(number);
    Console.WriteLine(number);
    Console.ReadKey();
}

static void AddFive(int number)
{
    number = number + 5;
}

Vytváříme celé číslo, přidělíme mu číslo 20 a pak použijeme metodu AddFive (), která má přidat číslo 5. Udělá to? Ne. Hodnota, kterou přidělíme číslu uvnitř funkce, se nikdy neprovede z funkce, protože jsme místo odkazu na ni předali kopii hodnoty čísla. To je prostě to, jak C # funguje, a v mnoha případech je to preferovaný výsledek. V tomto případě však chceme číslo uvnitř naší funkce změnit. Zadejte klíčové slovo ref:

static void Main(string[] args)
{
    int number = 20;
    AddFive(ref number);
    Console.WriteLine(number);
    Console.ReadKey();
}

static void AddFive(ref int number)
{
    number = number + 5;
}

Jak vidíte, vše co jsme udělali bylo, že bylo přidáno klíčové slovo ref do funkce prohlášení, stejně jako funkce volání. Pokud nyní spustíte program, uvidíte, že hodnota čísla se nyní změnila, jakmile se vrátíme z volání funkce.

Modifikátor out

Out modifikátor funguje do značné míry jako modifikátor ref. Oba zajišťují, že parametr je předáván odkazem namísto hodnotou,ale přichází s dvěma důležitými rozdíly: Hodnota předaná modifikátoru ref musí být inicializována před voláním metody - to není pravda pro modifikátor out, kde můžete použít neinicializované hodnoty. Na druhou stranu nemůžete ponechat volání funkce s parametrem out, aniž byste ji přidělili hodnotu. Vzhledem k tomu, že můžete zadat neinicializované hodnoty jako parametr Out, nemůžete skutečně použít parametr uvnitř funkce - můžete mu přiřadit pouze novou hodnotu.

Zda použít "out" nebo "ref" opravdu závisí na situaci a to si uvědomíte, jakmile je začnete používat. Obě se obvykle používají k řešení problému kdy je možné vrátit jednu hodnotu z funkce pomocí funkce C #.

Použití modifikátoru out je stejně jako použití modifikátoru ref, jak je uvedeno výše. Jednoduše změňte klíčové slovo ref na klíčové slovo out. Ve výše uvedeném příkladu a také nezapomeňte odebrat hodnotu přiřazenou číslu v metodě a místo toho deklarovat funkci volání.

Modifikátor parametrů

Všechny naše funkce zatím přijaly pevné množství parametrů. V některých případech však budete potřebovat funkci, která má libovolný počet parametrů. To by samozřejmě mohlo být provedeno přijetím pole nebo seznamu jako parametru, jako je tento:

static void GreetPersons(string[] names) { }

Volání by však bylo trochu nemotorné. V nejkratší podobě by to vypadalo takto:

GreetPersons(new string[] { "John", "Jane", "Tarzan" });

Je to přijatelné, ale lze to udělat i chytřejší a to s klíčovým slovem params:

static void GreetPersons(params string[] names) { }

Volání by pak vypadalo takto:

GreetPersons("John", "Jane", "Tarzan");

Další výhodou použití parametru params je, že do něj můžete také přenést nulové parametry. Funkce s parametry mohou mít i jiné parametry, pokud je parametr s klíčovým slovem params poslední. Kromě toho lze pro každou funkci použít pouze jeden parametr používající klíčové slovo params. Zde je poslední a další úplný příklad:

static void Main(string[] args)
{
    GreetPersons(0);
    GreetPersons(25, "John", "Jane", "Tarzan");
    Console.ReadKey();
}

static void GreetPersons(int someUnusedParameter, params string[] names)
{
    foreach(string name in names)
Console.WriteLine("Hello, " + name);
}

This article has been deprecated!

This article has been re-organized and updated to better match the rest of the tutorial.

We suggest that you read this article instead: Method parameters


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!