Проект «Передача по ссылке и по значению»

Подпрограмма типа Sub

При описании процедуры, как и при описании функции, ей дается уникальное название – имя процедуры и устанавливается список параметров. Параметры разделяются между собой запятой и содержат описание типов.

Общий вид описания процедуры:

Sub название_процедуры ([параметры])

операторы_процедуры

End Sub

Здесь:

o название_процедуры – имя создаваемой вами процедуры Sub;

o параметры – необязательный список формальных параметров, используемых в процедуре Sub;

o операторы_процедуры – блок операторов, который выполняет работу процедуры.

Вызов процедуры типа Sub
Чтобы вызвать в программе процедуру, нужно указать имя этой процедуры, а затем список фактических параметров, требуемых для этой процедуры.

Общий вид вызова процедуры:

Имя_переменной = название_функции(фактические параметры)

Если в процедуру не передается ни одного аргумента, то требуется наличие пустых круглых скобок.


Передача параметров

При описании процедуры после имени в круглых скобках указывается список параметров с указанием их типов. Эти параметры называются формальными. Они определяют место подстановки фактических параметров.

При вызове процедуры или функции в списке указываются фактические параметры, значения которых должны быть заранее определены.

Параметры можно передавать по значению и по ссылке.

В чем различие?

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

Языки программирования позволяют передавать в процедуру как значение переменной (передача по значению), так и ее адрес в оперативной памяти (передача по ссылке).

При передаче по значению в процедуру передается только копия переменной, т.е. процедура не получает доступ к переменной в памяти и не может изменить ее значение. Для передачи параметров по значению в описании процедуры перед параметром в списке параметров указывают ключевое слово ByVal (от англ. by value – по значению).

При передаче переменной по ссылке процедуре передается ссылка на ее адрес в оперативной памяти, таким образом, процедура получает доступ к переменной в памяти и может ее изменить. Чтобы передавать переменную по ссылке, необходимо в описании процедуры перед соответствующим параметром в списке добавить ключевое слово ByRef (от англ. by reference – по ссылке).

При вызове процедур ключевые слова, определяющие способ передачи параметров и тип параметров, не указываются.

Проект «Передача по ссылке и по значению»

Задание. Создать проект, в котором описывается процедура, один параметр которой передается по ссылке, а другой – по значению. Значения параметров внутри процедуры изменяются. В вызывающей процедуре переменным присваиваются начальные значения, производится вызов процедуры с указанием переменных в качестве фактических параметров. После выполнения процедуры значения переменных выводятся на надписи.

1. Разместить на форме:

o текстовые поля TextBox1 и TextBox2 для вывода начальных значений переменных;

o надписи Label1 и Label2 для вывода конечного значения переменных;

o кнопку button1 для создания процедуры-обработчика события;

o четыре надписи для вывода поясняющих текстов.

В программном коде процедуры первый параметр X передается по ссылке, а второй параметр Y передается по значению.

Создадим программный код проекта, в котором:

o объявим переменные;

o создадим процедуру, умножающую значение переменных, передаваемых по ссылке и по значению, на коэффициент 5;

o создадим обработчик, реализующих присваивание переменным начальных значений, вызов первой процедуры и осуществляющий вывод ключевых значений переменных на надписи.

2. Объявить переменные и создать код вызываемой процедуры:

 Dim RefA, ValB As Byte

 Sub refVal(ByRef RefA, ByVal ValB)

RefA = RefA * 5

ValB = ValB * 5

End Sub

3. Создать код вызывающей процедуры-обработчика события:

Private Sub Button1_Click(ByVal sender As System.Object,

_ByVal e As System.EventArgs) Handles Button1.Click

   RefA = Val(TextBox1.Text)

   ValB = Val(TextBox2.Text)

   refVal(RefA, ValB)

   Label1.Text = Str(RefA)

   Label2.Text = Str(ValB)

End Sub

4. Запустить проект на выполнение и вывести в текстовые поля начальные значения переменных (например, 3). На надписи будут выведены конечные значения переменной, передаваемое по ссылке (в данном случае, 15), и переменной, передаваемой по значению (в данном случае 3). Значение переменной, передаваемое по значению, не изменилось.Что и требовалось доказать!

 




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