2015-09-24 1 views
0

В настоящее время я переношу код с VB6.0 на VB.NET и заметил проблему. Я довольно новыми для VB6.0 и теперь я в курсе, что несколько значений могут быть возвращены следующие:VB return value

Function test(str1 As String, str2 As String) As Long 

str1 = "Hello World1" 
str2 = "Hello World2" 

test = 0 

End Function 

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

Любые советы будут оценены.

ответ

6

В VB6, параметры передаются по ссылке по умолчанию, где, как и в VB.NET, они передаются по значению по умолчанию. Это объясняет, почему оно ведет себя по-другому. Если вы хотите сохранить старое поведение и передавать параметры по ссылке, вы должны быть четко об этом (обратите внимание на дополнительные ByRef ключевые слова):

Function test(ByRef str1 As String, ByRef str2 As String) As Long 

str1 = "Hello World1" 
str2 = "Hello World2" 

test = 0 'don't forget to migrate this line to VB.NET as well 

End Function 
5

В VB.NET путь по умолчанию проходных параметров по значению (ByVal) вместо ссылки (ByRef). Чтобы получить поведение VB 6 вам нужно сделать параметры ByRef:

Function test(ByRef str1 As String, ByRef str2 As String) As Long 

    str1 = "Hello World1" 
    str2 = "Hello World2" 

    Return 0 

End Function 

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

В VB.NET у вас также есть оператор , который вы можете использовать для возврата значения. (Обратите внимание, что он выйдет из функции, для которой присвоение значения имени функции не выполняется.)