Почему больше не нужно указывать ByVal / ByRef?

Я только что установил пакет обновления для Visual Studio 2010 (предлагается в Центре обновления Windows) и вижу новую функцию в «intellisense», которая означает, что когда я пишуFunction или жеSub в VB.NET он не заполняет параметры автоматическиByRef или жеByVal...

1) Есть ли возможность настроить эту опцию обратно, как это было раньше?

2) Если я не укажуByXкакой из них используется по умолчанию? (кажется, что это всегдаByRef)

 Damien_The_Unbeliever09 февр. 2012 г., 09:50
По умолчаниюByVal, но убедитесь, что вы понимаете, чтопередача по значению и по ссылке на самом деле означает.
 Cody Gray♦09 февр. 2012 г., 09:51
Вы почти всегда хотите пройтиByValи это на самом деле по умолчанию. Там нет причин, чтобы код был загроможденByVal повсюду; это просто "шум". Только указатьByRef явно, когда вам абсолютно необходимо иметь семантику передачи по ссылке.

Ответы на вопрос(3)

ByRef (см., например, «Метод передачи параметров по умолчанию» внижняя часть этой страницыВеликий Чип Пирсон). Это может быть грязно.

Решение Вопроса

что вы просили напрямую, но следует еще кое-что иметь в виду, что любая переменная ссылочного типа, например, определенный пользователем класс, даже если она передается по значению, позволит вам вносить изменения в свойства этих экземпляров и т.д., которые остаются. Однако это не позволит вам изменить весь объект. Возможно, именно поэтому вам показалось невыполнением обязательств по ссылке

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:

Значением ссылочного типа является указатель на данные в другом месте в памяти. Это означает, что когда вы передаете ссылочный тип по значению, код процедуры имеет указатель на данные базового элемента, даже если он не может получить доступ к самому базовому элементу. Например, если элемент является переменной массива, код процедуры не имеет доступа к самой переменной, но может получить доступ к членам массива.

 mchar05 июн. 2017 г., 13:20
Этот ответ вводит в заблуждение, поскольку объясняет, «как работает значение ссылочного типа», тогда как вопрос «почему больше нет необходимости указывать ByVal / ByRef?»

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 более совместимым с C # и позволяет избежать ненужных «шумов» (это уже достаточно многословно).

Старое поведение:

Private Sub test(ByVal test As String)
End Sub

Новое поведение

Private Sub test(test As String)
End Sub
 mchar05 июн. 2017 г., 13:22
Краткий и прямой ответ, молодец!

Ваш ответ на вопрос