Почему нет необходимости указывать ByVal/ByRef?
Я только что установил пакет обновления для Visual Studio 2010 (предлагаемый в Центре обновления Windows), и я вижу новую функцию в "intellisense", что означает, что когда я пишу Function
или Sub
в VB.NET, t автозаполнение параметров с помощью ByRef
или ByVal
...
1) В любом случае, я могу настроить эту опцию до того, как она была раньше?
2) Если я не укажу ByX
, какой из них используется по умолчанию? (кажется, что он всегда ByRef
)
Ответы
Ответ 1
Тим покрыл то, что вы просили напрямую, но что-то еще, о чем следует помнить, состоит в том, что любая переменная ссылочного типа, такая как пользовательский класс, даже если она передана по значению, позволит вам вносить изменения в эти экземпляры свойств и т.д. Однако он не позволит вам изменить весь объект. Может быть, почему вам кажется, что вы не выполняете ссылку
Public Sub (Something As WhateverClass)
Something = New WhateverClass 'will result in no changes when outside this method
Something.Property1 = "Test" 'will result in an updated property when outside this method
End Sub
От MSDN:
Значение ссылочного типа является указателем на данные в другом месте в памяти. Это означает, что когда вы передаете ссылочный тип по значению, код процедуры имеет указатель на данные базового элемента, даже если он не может получить доступ к самому базовому элементу. Для Например, если элемент является переменной массива, код процедуры не имеют доступа к самой переменной, но она может обращаться к массиву члены.
Ответ 2
Кажется, что этот пост охватывает ваш вопрос:
http://msmvps.com/blogs/carlosq/archive/2011/03/15/vs-2010-sp1-changing-quot-byval-quot-vb-net-code-editor-experience.aspx
Нет, нет способа получить старое поведение. Отныне ByVal
по умолчанию (что было раньше), и он не будет автоматически добавляться к параметрам метода.
По-моему, это хорошее решение, поскольку он делает VB.NET немного более совместимым с С# и избегает ненужных "шумов" (он уже достаточно подробный).
Старое поведение:
Private Sub test(ByVal test As String)
End Sub
Новое поведение
Private Sub test(test As String)
End Sub
Ответ 3
Остерегайтесь при передаче подпрограмм в VBA, где по умолчанию используется ByRef
(см., например, "Метод передачи по умолчанию по умолчанию" в внизу этого страница, великий Чип Пирсон).
Это может быть грязно.