TOC

This article is currently in the process of being translated into Serbian (~67% done).

Основи:

Параметри функције

У претходном поглављу бавили смо се функцијама. Параметре смо само кратко дискутовали. Иако су параметри веома једноставни за употребу, постоје трикови који их могу учинити много моћнијим.

Прва ствар којом ћемо се позабавити јесу модификатори out и ref. C#, као и други програмски језици, прави разлику између две врсте параметара: вредносних и референтних. Стандард за C# јесу вредносни параметри, што суштински значи да, када проследите променљиву при позиву одређене функције, ви заправо шаљете копију објекта уместо референце према самом објекту. Осим тога, то значи и да можете да промените параметар унутар функције, али тиме нећете променити оригинални објект који сте проследили као параметар.

Овакво понашање можемо променити користећи кључне речи ref и out, чиме прослеђујемо референцу ка објекту уместо вредности објекта.

Модификатор ref

Обратите пажњу на следећи пример:

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

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

Креирамо променљиву која може да садржи цео број, додељујемо јој број 20 и затим позивамо метод AddFive() који том броју треба да дода 5. А да ли он то чини? Не. Вредност коју смо доделили броју унутар функције се не износи изван ње, јер смо, заправо, проследили копију бројне вредности уместо референце ка самом броју. То је начин функционисања програмског језика C#, а, у великом броју случајева, то је и жељени резултат. Међутим, у овом случају, заправо, желимо да модификујемо број унутар функције. Како бисмо то постигли, користићемо кључну реч 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;
}

Као што можете да видите, све што смо урадили јесте да смо додали кључну реч ref у декларацију функције, као и у позив функције. Ако сада покренете програм, видећете да се број променио после позива функције.

Модификатор out

Модификатор out функционише на доста сличан начин као и модификатор ref. Оба се брину за то да параметар буде прослеђен као референца, а не као вредност, али разликују се у две битне ставке: вредност прослеђена уз модификатор ref мора да буде иницијализована пре позива метода, што не важи за модификатор out, уз који можете да користите и неиницијализоване променљиве. С друге стране, не можете напустити функцију која користи модификатор out уз одређени параметар пре него што му доделите неку вредност. Будући да можете да проследите неиницијализоване вредности као параметар с модификатором out, нећете бити у могућности да користите тај параметар унутар функције, већ ћете само моћи да му доделите нову вредност.

Да ли ћете користити out или ref зависи од ситуације, што ћете схватити чим почнете да их користите. И један и други се најчешће користе као заобилазница око проблема да функција у C# може да врати само једну вредност.

Using the out modifier is just like using the ref modifier, as shown above. Simply change the ref keyword to the out keyword. In the example above, also remember to remove the value assigned to number in the method and declare it in the call function instead.

The params modifier

So far, all of our functions have accepted a fixed amount of parameters. However, in some cases, you might need a function which takes an arbitrary number of parameters. This could of course be done by accepting an array or a list as a parameter, like this:

static void GreetPersons(string[] names) { }

However, calling it would be a bit clumsy. In the shortest form, it would look like this:

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

It is acceptable, but it can be done even smarter, with the params keyword:

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

Calling it would then look like this:

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

Another advantage of using the params approach, is that you are allowed to pass zero parameters to it as well. Functions with params can even take other parameters as well, as long as the parameter with the params keyword are the last one. Besides that, only one parameter using the params keyword can be used per function. Here is a last and more complete example:

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!