Você está na página 1de 2

ByVal O que significa passar um valor por valor? a passagem apenas do contedo da varivel.

. Deste modo, o programa busca o que est contido no endereo da varivel e este valor enviado para a Sub. Se utilizarmos o nosso exemplo da Listagem 1, o valor 10 seria passado e pronto. Tudo ficar muito mais claro depois que voc entender o que vem a ser uma passagem por referncia. ByRef Passar uma varivel por referncia seria ao invs de passar o contedo da varivel, passarmos o endereo de memria da varivel. Deste modo, se novamente utilizarmos nosso exemplo da Listagem 1, ao invs de passarmos 10, passariamos o endereo, que 1001. Precisamos conhecer ou saber qual o endereo da memria? No. Tudo gerenciado pelo Visual Basic. Voc precisa apenas saber o que fazer com o parmetro recebido. ByVal ou ByRef? Qual a utilidade de enviar uma varivel por referncia ao invs de enviar por valor? Quando passamos uma varivel por valor, seja qual for o cdigo executado na Sub ou na Function, o contedo da varivel depois da execuo permanecer o mesmo, isto , nada que for feito dentro da rotina vai alterar a varivel na origem. Quando passamos uma varivel por referncia, como estamos passando na verdade o endereo da varivel, toda alterao que for realizada nesta varivel, o contedo do endereo de memria passado por referncia ser modificado. Seria como se crissemos uma imagem de nossa varivel, que qualquer alterao em qualquer dos pontos, ir refletir no outro. Novamente utilizando o exemplo da Listagem 1, que contm o valor 10, se passarmos esta varivel por referncia e dentro desta Sub alterarmos o valor para 20, quando o programa voltar da Sub, como o contedo do endereo foi alterado, a varivel intVariavel ter o valor 20. Vamos ver toda essa teoria na prtica. Crie uma nova aplicao do tipo Visual Basic Windows Application no Visual Studio.Net. O nome da aplicao no importa, pode deixar todos os valores/nomes default. Na classe Form1, coloque o cdigo da Listagem 4 depois da Sub Form1_Load:
Private Sub TestaByVal(ByVal pParametro As Integer) pParametro = pParametro + 10 'Resultado 20 MessageBox.Show(pParametro.ToString) End Sub

Private Sub TestaByRef(ByRef pParametro As Integer) pParametro = pParametro + 10 'Resultado 20 MessageBox.Show(pParametro.ToString) End Sub

Agora, adicione um boto ao formulrio (novamente mantenha os valores default). No evento Click deste boto, adicione o cdigo da Listagem 5:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles Button1.Click Dim intVariavel As Integer intVariavel = 10 TestaByVal(intVariavel) 'Resultado 10, pois mesmo tendo sido modificado na Sub, foi passado por valor MessageBox.Show("Aps a execuo da Sub TestaByVal: " & intVariavel.ToString) TestaByRef(intVariavel) 'Resultado 20, pois foi passado por referncia e foi modificado na Sub. MessageBox.Show("Aps a execuo da Sub TestaByRef: " & intVariavel.ToString) End Sub

Tambm quero citar uma outra grande utilidade de passagens por referncia, que supre uma carncia quando precisamos de receber mais de um valor como resultado de uma Function. Neste caso, voc pode utilizar uma Sub ou uma Function, passando as suas variveis por referncia e aps concluda a Sub (ou Function), os valores das variveis estaro atualizados.

Você também pode gostar