的方法轉換爲ByRef到BYVAL來電切換到的ByRef BYVAL在方法調用VB.NET
我已經由於許多警告提出:從XXXX到YYYY在抄襲「的ByRef值
「隱式轉換'參數zzzz回到匹配的參數。「
我的感覺是,將函數參數從byref更改爲byval是安全的,因爲這些方法中的引用類型指針沒有什麼特別的做法,引用類型只是被使用,我認爲行爲將是完全正確的如果使用複製指針而不是原始指針運行,則是相同的。
另一個考慮是我有兩個類從基類繼承。同樣的情況發生在byref參數正在引發從基類到狹義的具體類的隱式轉換。再次,我看不到用這個代碼運行byval的任何問題。
有沒有人在處理引用類型時有關於在函數中使用參數的提示?
當前在我的項目中通過byref傳遞的其他一些東西是數據庫連接對象,即OracleConnection和SqlConnection。有沒有什麼好的理由將這些傳遞給byref?
實施例1
從複製爲「ByRef」參數「值」返回到匹配的參數的值「對象」到「整數」隱式轉換。
呼叫號碼:
cmd = New SqlCommand()
cmd.Parameters.Add(CreateParameter("Alpha", SqlDbType.Int,ParameterDirection.Input, -1, AlphaValue))
功能:
Private Function CreateParameter(ByVal parameterName As String, ByVal dbType As SqlDbType, ByVal direction As ParameterDirection, ByVal size As Integer, ByRef value As Object) As SqlParameter
Dim retParam As SqlParameter
retParam = New SqlParameter(parameterName, dbType)
retParam.Direction = direction
retParam.Size = size
retParam.Value = value
Return retParam
End Function
實施例2
從 'System.Data.IDataReader' 隱式轉換到「System.Data.SqlClient.SqlDataReader '將'ByRef'參數'reader'的值複製回匹配的參數。
呼叫號碼:
Dim reader As new SqlDataReader
ReleaseReader(reader)
方法:
Public Sub ReleaseReader(ByRef reader As IDataReader)
If reader IsNot Nothing Then
If Not reader.IsClosed Then
reader.Close()
End If
reader.Dispose()
End If
End Sub
你可以提供一個代碼示例,將重現相同的警告?改變'ByRef' /'ByVal'參數可能會清除警告,但不是最好的解決方案。 – STW 2010-03-01 17:31:25