2015-04-17 3 views
0

Есть ли способ указать, что переменная передается ByRef в VB? Я знаю, что в C# у них есть ключевое слово ref, которое должно присутствовать как в заголовке функции, так и в вызывающем коде. Имеет ли VB эквивалент?Есть ли способ указать, что переменная передается ByRef в VB?

Например, моя функция выглядит следующим образом

private function add_one(byRef value)as Boolean 

код вызова будет выглядеть следующим образом

increment_was_successful = add_one(ByRef value) 
+2

Я уверен, что вы просто используете 'ByRef' вместо' ByVal' в методе, а затем просто передаете переменную без ключевых слов - например, increment_was_successful = add_one (value) '. – Tim

+0

@ Подумайте, вы правы, вам не нужно ключевое слово при вызове метода, но я надеялся, что вы это укажете. Это повышает читаемость при просмотре кода. возможно, читаемость не является правильным термином, я бы просто посмотрел ее явно, поэтому нет путаницы. – andrew

+2

Вы можете перестать искать, эквивалентный синтаксис не существует. У него было какое-то несвязанное использование в дни VB6, используемое для генерации значения указателя, а не переносимого другим способом в VB.NET. –

ответ

-1

Оказывается, VB просто не поддерживает эту форму.

increment_was_successful = add_one(ByRef value) 

Вы оставили вызов функции без какого-либо показателя, что она передается ByRef

increment_was_successful = add_one(value) 
+0

VB.Net поддерживает 'ByRef'. Это необходимо, так как остальная часть семейства .Net делает и CLR. – StarPilot

+0

@StarPilot Вы находите мое новое решение приемлемым? Я знаю, что .net поддерживает то, что в основном указатели, я просто искал конкретный формат. То, как программа C# .net использовала параметр 'out' для эмуляции указателя, что-то вроде этого' increment_was_successful = add_one (out value) ' – andrew

0

Чтобы прояснить мой запутанный комментарий ...

ByRef и ByVal используются в определении параметры суб или функции - не на вызов.

Вот код своего рода следует О.П. вопрос:

Dim orgVal As Integer = 1 

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click 
    Dim increment_was_successful As Boolean 
    increment_was_successful = add_one(orgVal) 
    MsgBox(increment_was_successful & " - " & orgVal) 
End Sub 

Private Function add_one(ByRef value As Integer) As Boolean 
    Const limit As Integer = 3 
    If value <= limit - 1 Then 
     value += 1 
     Return True 
    Else 
     Return False 
    End If 
End Function 

Обратите внимание на ByRef в определении функции. Если вы измените ByRef на ByVal, вы увидите, что orgVal никогда не меняет значение 'value' является локальным для add_one, а не указателем (ByRef) на orgVal.

Смежные вопросы