O Parâmetro do Mecanismo de Passagem para usuários do Visual Basic 6.0
Visual Basic 2008 apresenta várias alterações que afetam como argumentos são passados para procedimentos.
O Padrão do mecanismo de passagem
Visual Basic 6,0
No Visual Basic 6.0, se você não especificar ByVal ou ByRef para um parâmetro de procedimento, o mecanismo para passar argumentos padrão ByRef. Isso permite que a variável passada para o procedimento possa ser modificada no programa de chamada.
Expor uma variável para ser modificada pode resultar em uma armadilha.No exemplo a seguir, o mecanismo para passar argumentos padrão é ByRef, o valor de elapsedSeconds é alterado pelo minutesPastHour, e elapsedSeconds é exibida incorretamente por MsgBox.
Function minutesPastHour(seconds As Integer) As Integer
Dim hours As Integer = seconds \ 3600
seconds = seconds Mod 3600
Return seconds \ 60
End Function
Sub showSecondsAndMinutes()
Dim elapsedSeconds, extraMinutes As Integer
elapsedSeconds = CInt(Timer()) ' Integer seconds since midnight.
extraMinutes = minutesPastHour(elapsedSeconds)
MsgBox "Total seconds: " & elapsedSeconds & _
"; minutes past hour: " & extraMinutes
End Sub
Passar um argumento ByRef permite que um procedimento possa alterá-lo no programa de chamada, que pode levar a um comportamento inesperado. E se esse procedimento chama um outro procedimento e transfere o mesmo argumento ByRef, a possibilidade de acidentalmente alterar a variável original cresce.
Visual Basic 2008
Quando você declara um procedimento no Visual Basic 2008, o mecanismo para passar argumentos padrão ByVal para cada parâmetro. Isso protege os argumentos contra modificação.A declaração precedente ao exemplo pode ser escrita novamente como a seguir.
Function MinutesPastHour(ByVal Seconds As Integer) As Integer
Passagem seconds por valor impede que o procedimento acesse a variável no programa de chamada e ajuda a evitar a armadilha acabamos de descrever.
Embora ByVal é o mecanismo padrão, especificando explicitamente para cada incerteza remove de parâmetro e torna seu código mais fácil de ler.
Propriedade dos Argumento ByRef
Visual Basic 6,0
No Visual Basic 6.0, uma propriedade passadas para um procedimento sistema autônomo um ByRef argumento é copiado para o procedimento mas não copiado para fora. Isso significa que qualquer modificação para tais um argumento da propriedade não será refletida de volta para a propriedade original no programa de chamada, mesmo que ele foi passado por ByRef.
Visual Basic 2008
In Visual Basic 2008, um argumento da propriedade passada ByRef é copiado dentro e para fora do procedimento. O exemplo a seguir demonstra como uma propriedade pode ser alterada por um procedimento.
Sub Reduce(ByRef Height As Single)
' ... ... ... ... ... ... ... ' Code to modify Height argument.
End Sub
Dim Sq As Square = New Square ' Square has property Side of type Single.
Reduce(Sq.Side) ' Side is changed when Reduce returns.
Quando um procedimento modifica um argumento da propriedade, o valor da propriedade original não é alterado imediatamente no programa de chamada.Em vez disso, ele é copiado fora quando o procedimento retorna.
Argumentos do ParamArray
Visual Basic 6,0
No Visual Basic 6.0, um procedimento pode especificar o ParamArray palavra-chave no último de seus argumentos para aceitar uma matriz de Variant argumentos. Você não pode declarar o mecanismo passagem desses argumentos.Eles são passados sempre por ByRef.
Visual Basic 2008
In Visual Basic 2008, ParamArray argumentos são passados sempre por ByVal. Todos os argumentos na matriz devem ser do tipo de dados do ParamArray argumento.
Consulte também
Conceitos
Declaração de procedimentos para usuários do Visual Basic 6.0
Sequência de chamada de procedimento para usuários do Visual Basic 6.0
Sumário para programação de mudanças em elementos de suporte
Referência
Instrução Function (Visual Basic)