Шаг 63 - Передача параметров в функцию ref и out

По умолчанию при передачи параметра в функцию, функция не может изменить это параметр а только им воспользоваться, любые изменения внутри функции не скажутся на переменной. Однако это ситуацию можно изменить модификатором ref. При его использовании функция сможет изменять параметр. Смотрим пример:

using System;

class MainClass
{
	public static void Main(string[] args)
	{
		int a=1;
		int b=3;
		Test(a,ref b);
		Console.WriteLine(a);
		Console.WriteLine(b);
	}
	
	
	public static void Test(int a,  ref int b)
	{
		a=10;
		b=20;
	}
}

В данном примере функция может изменит параметр b, так как он был передан с модификатором ref. Смотрим результат:

gif/63_1.gif (2422 b)

Применение out аналогично как по смыслу так и по результату.

using System;

class MainClass
{
	public static void Main(string[] args)
	{
		int a=1;
		int b=3;
		//Test(a,ref b);
		Test(a,out b);
		Console.WriteLine(a);
		Console.WriteLine(b);
	}
	
	
	//public static void Test(int a,  ref int b)
	public static void Test(int a,  out int b)
	{
		a=10;
		b=20;
	}
}

Хотя разница между этими модификаторами есть. При использовании Ref параметр должен быть обязательно инициализирован, а при out это не требуется. Вобщем-то для простых типов значения это не имеет, а вот на пример для перечислений значение есть. Ведь объявить переменную типа перечисления можно без начальной инициализации, тогда при передачу в функцию нужно указывать out, а если она была инициализирована, то ref.


Загрузить проект | Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 6.10.2001