Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 19 su 19
  1. #11
    Utente di HTML.it L'avatar di 99eros9
    Registrato dal
    Jan 2003
    Messaggi
    2,637
    in vb.net un valore di tipo riferimento anche passato con byval viene comunque passato byref (detto in parole semplici)... quindi se passi un textbox, ad esempio, con byval in realtà lo stai passando comunque byref. Immagino che in vb6 vale questa regola.
    Tala är silver men tiga är guld!
    Pubblica il tuo curriculum
    Segnala il tuo sito
    Ancl

  2. #12
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,480
    Originariamente inviato da 99eros9
    in vb.net un valore di tipo riferimento anche passato con byval viene comunque passato byref (detto in parole semplici)... quindi se passi un textbox, ad esempio, con byval in realtà lo stai passando comunque byref. Immagino che in vb6 vale questa regola.
    Continuo a nutrire dubbi.

    Secondo me, pur essendo il valore passato un riferimento a tutti gli effetti, anche in questo caso l'uso di ByVal e ByRef cambia, anche se al momento non ho la possibilità di verificarlo sul campo.

    Dal punto di vista teorico, se passo un riferimento ByVal, non ho la possibilità di modificare tale riferimento, cioè di far puntare il parametro ad un oggetto differente senza perderlo al ritorno dal metodo; con ByRef, invece, passo per riferimento il riferimento stesso, quindi volendo potrei farlo puntare ad un altro oggetto e mantenere tale impostazione anche al ritorno dal metodo.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #13
    Utente di HTML.it L'avatar di 99eros9
    Registrato dal
    Jan 2003
    Messaggi
    2,637
    Ma se passi un valore ByVal crei una copia dell'area di memoria dello stack dove il valore è memorizzato. Questo valore può essere un tipo di valore, vedi i tipi di dati primitivi, o un riferimento ad un oggetto. Se passi il riferimento ad un oggetto con byval, non crei una copia dell'oggetto reale allocato nell'heap, ma crei lo stesso una copia del suo riferimento allocato nello stack, quindi per i tipi di riferimento o che usi ByVal o ByRef è la stessa cosa. Mi sarò intrecciato? :-)
    Tala är silver men tiga är guld!
    Pubblica il tuo curriculum
    Segnala il tuo sito
    Ancl

  4. #14
    Originariamente inviato da alka
    Continuo a nutrire dubbi.

    Secondo me, pur essendo il valore passato un riferimento a tutti gli effetti, anche in questo caso l'uso di ByVal e ByRef cambia, anche se al momento non ho la possibilità di verificarlo sul campo.

    Dal punto di vista teorico, se passo un riferimento ByVal, non ho la possibilità di modificare tale riferimento, cioè di far puntare il parametro ad un oggetto differente senza perderlo al ritorno dal metodo; con ByRef, invece, passo per riferimento il riferimento stesso, quindi volendo potrei farlo puntare ad un altro oggetto e mantenere tale impostazione anche al ritorno dal metodo.
    ....su questo non ci piove Alka

  5. #15
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    In VB6, se passi una istanza ByVal, viene creata una copia dell'oggetto su cui puoi operare e, in uscita sembra che questa venga ricopiata nell'istanza originale. Cio' non avviene se l'istanza viene passata ByRef.

    Per vedere la differenza, prova ad eseguire una

    Set o = Nothing

    di una istanza o passata per riferimento o per valore. Nel primo caso, al rientro, non potrai utilizzare l'istanza originale, nel secondo potrai ancora farlo in quanto la nothing ha agito sulla copia.

  6. #16
    Ciao oregon,

    Originariamente inviato da oregon
    In VB6, se passi una istanza ByVal, viene creata una copia dell'oggetto
    ... se dici così mi fai venire i dubbi :

    ho sempre creduto che non venga fatta nessuna copia
    (nel senso di 'deep copy') dell'istanza ma solo del 'puntatore' all'istanza

    ...in altre parole se oCls è l'istanza originale così dichiarata:

    dim oCls as class1
    set oCls = new class1

    passarla per valore equivale a fare

    dim oCls2 as class1
    set oCls2=OCls

    Cioè *due* puntatori ad *una sola istanza in memoria*.

    ....e mi sembra corretto perchè se confronto i puntatori ottengo:

    VarPtr(Ocls quella originale)<>ValPtr(Ocls quella passata ByVal)
    ...che interpreto come 2 puntatori

    ObjPtr(Ocls quella originale)=ObjPtr(Ocls quella passata ByVal)
    ...ad una sola istanza in memoria

    (ovviamente passata ByRef è tutto uguale)

    Originariamente inviato da oregon
    su cui puoi operare e, in uscita sembra che questa venga ricopiata nell'istanza originale. .....
    ...come sembra ???
    non agisco subito e direttamente sui campi dell'unica istanza in memoria ?

    Originariamente inviato da oregon
    Per vedere la differenza, prova ad eseguire una

    Set o = Nothing

    di una istanza o passata per riferimento o per valore. Nel primo caso, al rientro, non potrai utilizzare l'istanza originale, nel secondo potrai ancora farlo in quanto la nothing ha agito sulla copia.
    ... OK equivale ad incrementare il conteggio dei riferimenti all'unica istanza se passata ByVal o no ?

  7. #17
    Utente di HTML.it L'avatar di 99eros9
    Registrato dal
    Jan 2003
    Messaggi
    2,637
    Originariamente inviato da oregon
    In VB6, se passi una istanza ByVal....
    ma in .net questo non dovrebbe avvenire, se non erro... o avviene ma riguarda solo visual basic?
    Tala är silver men tiga är guld!
    Pubblica il tuo curriculum
    Segnala il tuo sito
    Ancl

  8. #18
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Originariamente inviato da sspintux
    Ciao oregon,

    ... se dici così mi fai venire i dubbi :

    ...

    Cioè *due* puntatori ad *una sola istanza in memoria*.
    Errata corrige ... in effetti e' come dici tu ... nessuna copia dell'istanza ma solamente della variabile che contiene il puntatore all'istanza.

    Quello che passa per riferimento o per valore e' solamente il "contenitore" del puntatore all'istanza.


  9. #19
    Utente di HTML.it L'avatar di 99eros9
    Registrato dal
    Jan 2003
    Messaggi
    2,637
    Francesco Balena Docet
    Tala är silver men tiga är guld!
    Pubblica il tuo curriculum
    Segnala il tuo sito
    Ancl

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 © 2026 vBulletin Solutions, Inc. All rights reserved.