Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    VisualBasic: ByRef e ByVal

    Salve,
    potrebbe sembrare una domanda stupida...
    Mi spiegate meglio il passaggio degli argomenti ad una funzione....la differenza tra il metodo ByRef e quello ByVal...non capisco...il mio libro non è molto chiaro...
    grazie

  2. #2
    Utente di HTML.it L'avatar di darkblOOd
    Registrato dal
    Jul 2001
    Messaggi
    2,212
    Ciao,
    la differenza sostanziale sta nel fatto che gli argomenti passati ByRef fanno "riferimento" all'allocazione di memoria in cui è copiato il valore della variabile in questione, mentre quelli passati ByVal contengono solo un "copia del valore" che attualemente si trova nella allocazione di memoria.

    Se tu passi un riferimento ad una funzione ByVal e modifichi il valore della variabile all'interno della funzione stessa, alla fine dei calcoli, tornando alla routine che ha chiamato la funzione ti trovi ancora il valore originale della variabile. Cioè le modifiche fatte all'interno della funzione non hanno modificato il valore originale, poichè hai lavorato su una copia del valore stesso.

    Se invece lo passi ByRef, modificheresti il contenuto della cella di memoria che tiene l'instanza della variabile e quindi perderesti il valore originale della variabile.


    Per esempio:

    Apri un progetto ed inserisci un Button nel form e copia il codice qui sotto.
    codice:
    Private Sub Button1_Click()
       Dim TestByVal as String, TestByRef As String
       TestByVal="Valore Originale ByVal"
       TestByRef="Valore Originale ByRef"
       Test1(TestByVal, TestByRef)
       MsgBox("Valore 1 " & TestByVal & vbcrlf & "Valore 2 " & TestByRef)
    End Sub
    
    Private Sub Test1(ByVal Valore1 as string, ByRef Valore2 as String)
       Valore1="Modifica valore ByVal"
       Valore2="Modifica Valore ByRef"
    End Sub
    Vedrai che la msgbox ti restituirà il valore originale della variabile passata ByVal mentre per quella passata ByRef ti troverai il valore che le è stato assegnato nella Sub chiamata dopo.


    Spero di essere stato chiaro.


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.