Неправильно ли передавать параметры ByRef и ByVal в одной и той же процедуре? - PullRequest
4 голосов
/ 07 декабря 2010

Считается ли плохой практикой (VB.NET или любой другой язык) кодирование функции с параметрами ByVal и ByRef, которые используются в моей функции getFile ниже?

Function getFile(ByVal channel As Integer, _
                 ByRef Filename As String, _
                 ByRef Filesize As String) As Integer
...
End Function

...
Dim status As Integer
Dim filename As String
Dim filesize As Integer

For channel In 1 To 16
   status = getFile(channel, filename, filesize) 
   ...
Next channel

1 Ответ

6 голосов
/ 07 декабря 2010

Я обычно стараюсь избегать ByRef всего вместе, это часто заканчивается уродством и путаницей.Тот факт, что вы смешиваете ByVal и ByRef, не влияет на читабельность больше, чем просто наличие всех ByRef ИМХО.

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

Как говорит Ассаф в своем комментарии, вместо этого я обычно пытаюсь обойти всю проблему, заставляя метод возвращать какую-то структуру, которая может содержать все возвращаемые данные.и если это не удастся, я сгенерирую исключение, а не верну статус (при условии, что это какая-то ошибка).

...