Despeja tus dudas de programación
0 votos

Ya sea en Sub o Function, Cuando debo usar una u otra?

Cuál es la diferencia?

cerrada
por en VB.NET
   

1 Respuesta

0 votos
Mejor respuesta

ByVal toma el valor del objeto o variable que envías al método y luego trabaja con ese valor. Dejando el objeto original sin modificar.

ByRef crea una referencia del objeto o la variable. Los cambios que hagas con ella dentro del Sub se verán reflejados incluso fuera del método a donde la enviaste.

Puedes correr el siguiente código para que entiendas mejor como funciona

Sub Usando_ByRef(ByRef x As Integer)
    x = x * 2
    MsgBox("X vale " & x & " Dentro del Sub Usando_ByRef")
End Sub

Sub Usando_ByVal(ByVal x As Integer)
    x = x * 2
    MsgBox("X vale " & x & " Dentro del Sub Usando_ByVal")
End Sub


Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Dim Mi_Variale As Integer = 10

    MsgBox("Mi Variable vale " & Mi_Variale & " Al momento de crearla")

    'Envio usando ByVal
    Usando_ByVal(Mi_Variale)

    MsgBox("Mi Variable vale " & Mi_Variale & " Cuando retorno del sub luego de enviarla ByVal. Es decir no ha cambiado")

    'envío usando ByRef
    Usando_ByRef(Mi_Variale)

    MsgBox("Mi Variable vale " & Mi_Variale & " Cuando retorno del sub  luego de enviarla ByRef. Es decir ha cambiado su valor")


End Sub

Cuando envío Mi_Variable - que vale 10 - a un Sub vía ByVal este valor es recibido, nombrado X y luego multiplicado por 2.
Dentro del Sub X vale ahora 20. Cuando retorno al Form_load sin embargo, Mi_Variable sigue valiendo 10.

El otro caso es enviar Mi_Variable vía ByVal aquí la variable es referenciada y se le asigna el nombre X para trabajar dentro del Sub, e igualmente multiplicado por 2.
X luego de ejecutarse el Sub vale ahora 20 y el gran cambio es que al retornar al Form_load Mi_Variable también vale 20 (es decir el valor de X)


enlightenedSi esta respuesta te ayudo, no te olvides de marcarla como correcta smiley

por (8.6k puntos)
seleccionada por

Bienvenido a la sección de Desarrolladores (developers) de Pregunten.Net.

Aquí puedes despejar tus dudas básicas sobre relacionadas a diversos lenguajes de programación

Categorías

44 preguntas
51 respuestas
25 comentarios
3,251 usuarios