Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

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

Функции аргументов процедур Sub

Пример: Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As_

System.EventArgs) Handles MyBase.Load:

- фраза ByVal sender As System.Object означает, что контейнер (sender) передаёт в процедуру по значению (ByVal) параметры системного класса System;

- фраза ByVal e As System.EventArgs означает, что в процедуру передаются по значению (ByVal) параметры e класса обработки событий (System.EventArgs). Параметр e - это какая-то системная функция Windows;

- фраза Handles… свидетельствует о том, что выполняется процедура, вызываемая событием, в частности, загрузкой формы MyBase.Load. Если процедура вызывается по имени, то эта фраза отсутствует.

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

Передача параметров может задаваться двумя способами:

- по значению (By value);

- по ссылке (By reference).

В случае передачи в процедуру по значению (оператор ByVal) в качестве переменной передаётся не сама переменная, а её значение.

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

 

Module Module1

Sub Тест(ByVal A As String, ByRef B As String)

A = "Строка, передаваемая по значению"

B = " Строка, передаваемая по ссылке"

End Sub

 

Sub Main()

Dim A As String

A = "Привет"

Dim B As String

B = "Здравствуй, мир!"

MsgBox(strA & ", " & strB) 'визуализируются обе локальные переменные

Тест(A, B)

MsgBox(A & ", " & B) 'визуализируется локальная переменная по значению

'и модульная переменная - по ссылке

End Sub

End Module

В модульной процедуре "Тест" объявляется, что переменная A, являющаяся параметром процедуры, передаётся по значению (ByVal), а переменная B - передаётся по ссылке (ByRef).

При выполнении процедуры Sub Main() используются локальные переменные, имеющие те же имена, что и модульные переменные, т. е. в окне сообщения появляется текст: "Привет, Здравствуй, мир!".

Когда же выполняется процедура "Тест"(A, B), вызываемая по имени (как переменная), то переменная A, передаваемая по значению, будет инициализироваться, как и указано: по локальному значению, присвоенному в процедуре Sub_Main(), а переменная B локального значения не принимает, т. к. имеет ссылку на значение, присвоенное в модуле. Таким образом, в случае переменной B возвращается прежнее значение, и в окне сообщения появляется текст: "Привет, Строка, передаваемая по ссылке".

Объявление и присвоение переменной значения (как и для константы) может осуществляться в одной строке, например, для предыдущего кода:

Dim refstrB As String = "Здравствуй, мир!"

<== предыдущая лекция | следующая лекция ==>
Разновидности процедур | Делегаты
Поделиться с друзьями:


Дата добавления: 2014-01-05; Просмотров: 354; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.011 сек.