Основы C#. Урок 28. Передача параметров по ссылке и по
значению (ref и out)
Если мы передаем в некоторую функцию параметр, то функция
по умолчанию работает с копией параметра, а не с оригиналом.
Это называется перередача по значению. При этом при изменении
передаваемого параметра внутри функции значение
соответствующей переменной вне функции не изменится. Иногда же
нам надо, что бы функция действительно изменяла передаваемые в
нее параметры. Для этого мы должны передавать их по ссылке.
Для этого мы используем ключевое слово ref. Вот
пример: class Test
{
static void SomeFunction1(int a)
{
a=12; //Изменяем копию параметра функции
}
static void SomeFunction2(ref int a)
{
a=55; //Изменяем оригинал параметра функции
}
public static void Main()
{
int z=23;
SomeFunction1(z);
Console.WriteLine(z); //Напечатается 23
SomeFunction2(ref z);
Console.WriteLine(z); //Напечатается 55
}
}
Обратите внимание, что при вызове функции SomeFunction2 мы
опять используем ключевое слово ref (как и при объявлении этой
функции): ...
SomeFunction2(ref z);
...
Параметр out аналогичен параметру ref, только при его
использовании в функцию можно передавать неинициализированные
переменные (т. е. переменные с незаданными начальными
значениями). Вот пример: class Test
{
static void SomeFunction2(ref int a)
{
a=55;
}
static void SomeFunction3(out int a)
{
a=66;
}
public static void Main()
{
int z=0; //Переменную z надо обязательно инициализировать
SomeFunction2(ref z);
Console.WriteLine(z); //Напечатается 55
int y; //Переменную y можно не инициализировать
SomeFunction3(out y);
Console.WriteLine(y); //Напечатается 66
}
}
При вызове такой функции обязательно использование
ключевого слова
out. |