Ref тип имя

Пример заголовка метода, имеющего один параметр-ссылку целого типа: void В(ref int z);

Строго говоря, методы, которые результатом своей работы имеют лишь одну величину, возвращают ее в вызывающий блок с помощью оператора return. Этот вариант намного проще, так как не требует работы с параметрами-ссылками.

Параметры-ссылки рекомендуется использовать лишь в тех случаях, когда метод должен возвращать более одной величины, или если в методе требуется изменить значения каких-либо передаваемых в него величин.

Исходные данные передавать в метод по ссылке можно, но не рекомендуется, чтобы исключить возможность их непреднамеренного изменения. Однако необходимо помнить, что для параметра-значения в метод передается его копия. И если размер этого значения очень велик, то увеличивается расход оперативной памяти на копии. Особенно ее расход возрастает при работе рекурсивных методов. В этом случае возможно использовать для передачи исходных данных параметры-переменные, но под бдительным оком программиста.

Проиллюстрируем передачу параметров-значений и параметров-ссылок на примере (листинг 3).

Листинг 3- Параметры-значения и параметры-ссылки

using System;

namespace ConsoleApplication3

{

class Program

{

static void Prim(int w, ref int z)

{

w = 5; z = w;

Console.WriteLine("внутри метода Prim: w="+w+" z="+z);

}

static void Main()

{

int w = 1, z = 2;

Console.WriteLine("до вызова Prim: w=" + w + " z=" + z);

Prim(w, ref z);

Console.WriteLine("после завершения работы Prim: w=" + w + " z=" + z);

}

}

}

Суть этой простой программы заключается в следующем: в методе Main задаются начальные значения двух переменных int w = 1, z = 2;

Затем вызывается объявленный ранее в данном классе метод Prim, в котором значения переменных становятся равными: w = 5; z = w;

После завершения работы метода Prim вновь проверяются значения переменных.

Результаты работы этой программы:

Как легко увидеть, значение переменной w и до и после работы метода Prim одно и то же, оно не изменилось, поскольку переменная передавалась по значению, а значение переменной z изменилось потому, что она была передана по ссылке.

Несколько иная картина получится, если передавать в метод не величины значимых типов, а экземпляры классов, то есть величины ссылочных типов. Как вы помните, переменная-объект на самом деле хранит ссылку на данные, расположенные в динамической памяти, и именно эта ссылка передается в метод либо по адресу, либо по значению. В обоих случаях метод получает в свое распоряжение фактический адрес данных и, следовательно, может их изменить.

Для простоты можно считать, что объекты всегда передаются по ссылке. Разница между передачей объектов по значению и по ссылке состоит в том, что в последнем случае можно изменить саму ссылку, то есть после вызова метода она может указывать на другой объект.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: