在同一套路中传递ByRef和ByVal参数的不良做法?

Ste*_*ven 4 language-agnostic vb.net programming-languages

用下面的getFile函数中使用的ByVal和ByRef参数编写函数是不是被认为是不好的做法(VB.NET或任何语言)?

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
Run Code Online (Sandbox Code Playgroud)

Han*_*son 6

我通常会尽量避免ByRef所有这些,它往往最终变得丑陋和混乱.您混合ByVal并且ByRef不会影响可读性的事实不仅仅是拥有所有ByRef恕我直言.

例如,如果我只需要文件名,我仍然需要传入一个filesize变量,我觉得它有点丑陋.在阅读代码时,很容易错过参数可能会被更改.

正如Assaf在他的评论中所说的那样,我通常会尝试通过让方法返回某种可以包含所有返回数据的结构来解决整个问题.如果失败,我会抛出异常而不是返回状态(假设状态是某种错误).

  • 我应该补充一点,尽管如果函数需要返回一个值,通常最好将函数返回值而不是byref参数. (2认同)
  • 如果函数需要返回多个值,则应该专门为此目的创建一个类或结构. (2认同)