방법에 BYVAL로하는 ByRef을 나는 많은 경고로 인해 제기전환은 VB.NET
를 호출 전환을 호출 '매개 변수를 다시 일치하는 인수로 zzzz. "
내 생각에 참조 형식이 사용되는 참조 형식 포인터를 사용하는 특별한 방법이 없기 때문에 byref에서 function 매개 변수를 변경하는 것이 안전합니다.이 동작은 정확하게 사용됩니다. 원본보다는 포인터를 복사하여 실행하는 경우 동일합니다.
또 다른 고려 사항은 기본 클래스에서 상속하는 두 개의 클래스가 있다는 것입니다. 바이 패스 매개 변수가 기본 클래스에서 더 좁은 구체 클래스로의 암시 적 캐스팅을 유발하는 것과 동일한 상황이 발생합니다. 다시 나는 byval을 실행하는이 코드에서 어떤 문제도 볼 수 없다.
참조 형식을 다룰 때 함수에 매개 변수를 사용하는 것과 관련된 조언이 있습니까?
현재 내 프로젝트에서 byref 주위로 전달되는 다른 것들은 데이터베이스 연결 개체 즉 OracleConnection 및 SqlConnection입니다. byref 주위를 통과 할만한 이유가 있습니까? 다시 매칭 인수 '하는 ByRef'매개 변수 '값'의 값을 복사에 '정수'를 '객체로부터
예 1
암시 적 변환.
전화 번호 :
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