2010-12-07 44 views
4

在我的getFile函數中使用ByVal和ByRef參數來編寫函數是否被認爲是不好的做法(VB.NET或任何語言)?錯誤的做法傳遞ByRef和ByVal參數在相同的例程?

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 
+3

我可以看到這個機制可能有用,但最終該方法的輸出變得混亂: 它返回一個整數和(有時)一個文件名/文件大小。我會讓它返回一個簡單的結構與三種類型的信息。 – Assaf 2010-12-07 20:05:42

回答

6

我通常儘量避免ByRef所有在一起,它往往最終是醜陋和混亂。 事實上,你混合ByValByRef不會影響可讀性不僅僅是所有ByRef恕我直言。

例如,如果我只需要文件名,我仍然需要傳入一個文件大小變量,這讓我覺得有點醜。在閱讀代碼時,可能很容易錯過一個參數可能會改變。因爲Assaf在他的評論中也說過,相反,我通常會嘗試通過讓方法返回某種可以包含所有返回數據的結構來解決整個問題。如果失敗,我會拋出異常而不是返回狀態(假設狀態是某種錯誤)。

+1

同意。必要時使用byref和byval,並且您將成爲黃金。大多數參數都是單向傳入的,所以它們應該是BYVAL。但在某些情況下,您需要能夠修改傳入的參數。不是很常見,但這就是你有Byref的原因。 – DarinH 2010-12-07 22:15:15