powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Разницу между ByRef и ByVal...
6 сообщений из 6, страница 1 из 1
Разницу между ByRef и ByVal...
    #32914170
Фотография Farkhod
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Объясните пожалуйста мне разницу между ByRef и ByVal. Если можно с примером.
Спасибо.
...
Рейтинг: 0 / 0
Разницу между ByRef и ByVal...
    #32914179
zz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
при byRef ты передаешь ссылку на объект, при byVal - сам объект. Примерно так.
...
Рейтинг: 0 / 0
Разницу между ByRef и ByVal...
    #32914265
Фотография Лиман Артём
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zzпри byRef ты передаешь ссылку на объект, при byVal - сам объект. Примерно так.

немного попрявлю...
для размерных типов так оно и есть..
если параметром передается ссылочный тип, а не размерный, то в любом случае передается указатель...
но в случае ByVal этот указатель копируется, а в случае ByRef - передается ссылка на ссылку этого указателя (программирующим на с++ такое должно быть знакомо по аналогии с int**)
так в чем же разница?
а в том, что при ByVal раз ссылка передается по значению, то значит внутри этого метода ссылку нельзя поменять, а вот разименовать указатель и поменять значения свойств объекта можна. А вот при передаче ByRef - указатель передается ссылкой на указатель - следовательно эту ссылку можна поменять.
Вот пример, наглядно иллюстрирующий это:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
class Test
  public Field as string = "Init Value"
end class

...
sub Main
 dim o as Test = new Test()
 SubByVal( 0 )
 Debug.WriteLine(o.Field)
 SubByRef(o)
 Debug.WriteLine(o.Field)
end sub
....

sub SubByVal(byVal obj as Test)
 obj = new Test()
 obj.Field = "ByVal"
end sub

sub SubByRef(byRef obj as Test)
 obj = new Test()
 obj.Field = "ByRef"
end sub

...

'Вывод в деббаге:
' "Init Value"
' "ByRef"
...
Рейтинг: 0 / 0
Разницу между ByRef и ByVal...
    #32914315
Фотография Farkhod
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
значит всегда лучше использовать ByRef ????
...
Рейтинг: 0 / 0
Разницу между ByRef и ByVal...
    #32914332
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
значит всегда лучше использовать ByRef ????

Если вам необходимы такие действие то выбирать не придется.
...
Рейтинг: 0 / 0
Разницу между ByRef и ByVal...
    #32914334
Фотография Лиман Артём
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Farkhodзначит всегда лучше использовать ByRef ????

да почему же?
для размерных типов, конечно выгоднее было бы использовать ByRef во избежание затрат на копирование всех значений. В случае ссылочных типов, если не нужно изменять ссылку (а это нужно крайне редко), то используй ByVal..
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Разницу между ByRef и ByVal...
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]