Основы 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.
|