ByVal, ByRef - для чего они?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Конь
Постоялец
Постоялец
 
Сообщения: 650
Зарегистрирован: 02.06.2006 (Пт) 6:49
Откуда: г. Красноярск

ByVal, ByRef - для чего они?

Сообщение Конь » 26.09.2006 (Вт) 16:49

Собственно, вопрос в названии топика...
Подпись находится в стадии разработки...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 26.09.2006 (Вт) 16:53

Изображение

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 26.09.2006 (Вт) 16:58

Э...




А...




Мда...





Если ты указываешь ByVal, это значит, что аргумент будет передан по значению. Т.е. текущее значение аргумента будет скопировано во временную переменную и передано в процедуру (вернее, передана будет ссылка на копию). Чтобы ты в процедуре с этой переменной не делал, исходный аргумент не изменит своего значения.

Если ты указываешь ByRef, то аргумент будет передан по ссылке. Т.е. в процедуру будет передан сам аргумент (ссылка на него). В этом случае если ты поменяешь значение аргумента внутри вызываемой процедуры, то он сменит свое значение и в выхывающей процедуре.

Пользовательские типы и массивы могут быть переданы только ByRef. Объекты могут быть переданы любым способом, но следует помнить, что это относится не к содержимому объекта, а к ссылке на него (ссылка на ссылку). Т.е. при уничтожении объекта (Set ... = Nothing) в случае ByVal в вызывающей процедуре объект останется, в случае ByRef обнулится. Object.Value=NewValue в любом случае изменит значение свойства в обоих случаях.

При передаче аргументов через API есть нюансы. Но это в другой раз.
Lasciate ogni speranza, voi ch'entrate.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 26.09.2006 (Вт) 21:10

Э... alibek плохой, потому что контент дублирует, а Тёмыч... ну, тоже придумаем что-нибудь :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 98

    TopList